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