删除所有子目录中的匹配文件


76

如何在Linux下删除所有子目录中的所有.swp文件?


3
不要忘了看诸如rash-cli之类的程序,这样您可以取消删除,而不必使用rm。code.google.com/p/trash-cli (您在以下所有答案中都将“ rm”替换为“ trash”。)

Answers:


136

删除当前目录下的所有* .swp文件,使用find以下格式之一的命令:

  • find . -name \*.swp -type f -delete

    -delete选项意味着find将直接删除匹配的文件。这是与OP实际问题的最佳匹配。

    使用-type f均值查找将仅处理文件。

  • find . -name \*.swp -type f -exec rm -f {} \;
    find . -name \*.swp -type f -exec rm -f {} +

    选项-exec允许find对每个文件执行任意命令。第一个变体将对每个文件运行一次命令,第二个变体将通过替换{}尽可能多的参数来运行尽可能少的命令。

  • find . -name \*.swp -type f -print0 | xargs -0 rm -f

    将输出管道连接到xargs的方式比使用可能的更复杂的每个文件命令使用-exec。该选项-print0指示find使用ASCII NULL而不是换行符来分隔匹配项,并-0告知xargs期望使用NULL分隔的输入。这使管道构造对于包含空格的文件名安全。

请参阅man find以获取更多详细信息和示例。


16

find . -name '*.swp' -delete

找到删除内容后,删除本身就消除了文件名中嵌入空间的任何风险,...为了提高安全性,还可以考虑-type f仅为文件添加内容。


4
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp

2

为了在我的主目录下搜索(并使用GNU'find'和'xargs'),我将使用:

find $HOME -name '*.swp' -print0 | xargs -0 rm -f

-print0”和“ -0”的使用意味着名称将由ASCII NUL'\ 0'字符分隔,这将处理名称中带有空格等的文件路径。如果您认为目录下可能存在目录(或设备文件,FIFO,其他非文件),则可以在-type f“查找”中添加“ ”选项。如果只有目录,则上面的命令将无法正常删除它们。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.