2010-02-22 13:58:05 +0000 2010-02-22 13:58:05 +0000
84
84

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

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

答案 (5)

147
147
147
2010-02-22 13:59:15 +0000

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

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

-delete选项的意思是查找会直接删除匹配的文件。这是最符合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

16
16
16
2010-02-22 14:07:23 +0000

find . -name '*.swp' -delete

让find自己进行删除,可以消除文件名中嵌入空间的风险,… 为了额外的安全,也可以考虑只为文件添加-type f

4
4
4
2010-02-22 14:11:50 +0000
find /path -type f -name "*.swp" -delete
find /path -type f -name "*.swp" -exec rm -f "{}" +;

bash 4.

shopt -s globstar
rm -f /path/**/*.swp
``` bash 4.0
2
2
2
2010-02-22 14:04:52 +0000

在我的主目录下搜索(使用GNU的'find'和'xargs'),我会使用。

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

使用 “-print0"和 ”-0“意味着文件名将以ASCII NUL”\0 “字符分隔,这将处理文件名中带有空白等的文件路径。如果你认为你的目录下可能有以’.swp'结尾的目录(或设备文件,或FIFO,或其他非文件),你可以在'find'中添加’-type f‘选项。如果你只有目录,上面的命令就会失败,无法将其删除噪。

0
0
0
2019-11-17 04:04:10 +0000

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

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