如何从目录名称中删除回车符?

如何从目录名称中删除回车符?

我在 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及其衍生版本的用户:更改renamerename.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 '{}' \;

相关内容