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

Ale*_*lex 103 linux shell find

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

Lac*_*che 176

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

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

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

    使用-type f手段 find 只会处理文件。

  • 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更多详细信息和示例,请参阅。


小智 22

find . -name '*.swp' -delete

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


use*_*894 7

find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;
Run Code Online (Sandbox Code Playgroud)

bash 4.0

shopt -s globstar
rm -f /path/**/*.swp
Run Code Online (Sandbox Code Playgroud)