我在 Excel 中创建了一个文件并将该文件通过 ftp 传输到我的 Linux 机器上。文件中有一堆mkdir命令。现在所有新创建的目录的末尾都有一个回车符。我可以使用以下命令找到目录:
find . -type d -name *$'\r'
Run Code Online (Sandbox Code Playgroud)
但是当我尝试使用此命令删除它们时:
find . -type d -name *$'\r' | xargs rm-rf
Run Code Online (Sandbox Code Playgroud)
它不起作用 - 没有任何东西被删除。目录仍然存在,并且它们仍然有回车符。
你能帮我创建一个命令来删除那些讨厌的 '\r's 吗?谢谢。
PS 我使用的是 RHEL 5.3
Linux 的rename命令使这变得简单:
rename $'\r' '' *
Run Code Online (Sandbox Code Playgroud)
这会将当前目录中所有文件名中的第一个也是唯一一个回车符 ( $'\r')替换为空字符串 ( '')。不包含回车的名称保持不变(或者您可以写入rename $'\r' '' *$'\r'只考虑必须重命名的文件)。
如果您还需要对子目录中的文件进行操作:
shopt -s globstar
rename $'\r' '' **/*$'\r'
Run Code Online (Sandbox Code Playgroud)
(Debian、Ubuntu 及其衍生产品的用户:更改rename为rename.ul,或更改rename $'\r' ''为rename 's/\r//'。)
替代方案,使用 zsh 的zmv功能:
zmv $'**/*\r' "${f%?}"
Run Code Online (Sandbox Code Playgroud)
编辑:忘记双重转义行中的 \ sedr
其中任何一个都适合你
for i in $(find . -type d -name '*\r'); do mv "$i" "$(echo $i | sed -e 's/\\r//g')"; done
find . -type d -name '*\r' -exec mv "{}" "$(echo {} | sed -e 's/\\r//g')" \;
Run Code Online (Sandbox Code Playgroud)
这将找到当前目录下名为 *$\r 的所有目录
然后它会将mv它们(重命名)为相同的名称减去 \r