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

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

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

答案1

删除当前目录下的所有 *.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参阅更多详细信息和示例。

答案2

find . -name '*.swp' -delete

找到并删除后,它会自行消除文件名中嵌入空格的风险,...为了更加安全,还可以考虑-type f仅添加文件。

答案3

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

答案4

如果您想删除所有子文件夹中的所有文件,可以使用提供的命令,

$ find . -name \* -type f -delete

相关内容