如何递归删除包含空格的文件?

如何递归删除包含空格的文件?

我在 Ubuntu 的 bash 下使用此命令时遇到了一些问题:

rm $(find . -name "*.exe")

我的目标是递归地删除所有以 结尾的文件.exe。但有些文件有空格,这会破坏命令。

关于如何解决这个问题有什么建议吗?

答案1

find . -name "*.exe" -exec rm -f '{}' +

这有find格式化命令和参数,并小心避免混淆名称(通过将每个名称作为单独的参数传递给rm)。“+”表示“在一次执行中尽可能合理地执行尽可能多的操作rm”。

答案2

您可以将输出从管道传输findxargs,并指定仅将换行符视为文件名之间的分隔符:

find -name '*.exe' | xargs -d \\n rm

更便携的方法是使用空字符作为分隔符:

find -name '*.exe' -print0 | xargs -0 /bin/rm

请参阅find的联机帮助页以获取执行此操作的示例。

另一个选择是使用您使用的命令,但将 bash 的内部参数分隔符设置为仅换行符:

IFS=$'\n'; rm $(find . -name "*.exe");

这里$'...'使用引号构造来创建换行符。如果文件名列表很长,这种方法的弹性会比使用 差xargs

答案3

只需将-delete选项传递给find

find . -name "*.exe" -delete

这可以节省您的引用和任何其他文件名麻烦,并且可能比-exec不需要生成新进程的速度更快。

答案4

手动转义字符可能会对您有所帮助。

find . -name "*.exe" | sed -s 's/\ /\\ /' | xargs rm -f

相关内容