使用 bash 中的 find 根据扩展模式对填充进行操作

使用 bash 中的 find 根据扩展模式对填充进行操作

我正在使用“查找”命令从执行命令的目录中的所有子文件夹中删除给定扩展的一些无用的填充。

find -type f -name *.txt -delete
find -type f -name *.xml -delete
find -type f -name *.pdbqt -delete
find -type f -name *.txt -delete

是否可以将这 4 条命令合并为一条命令,通过 1 条命令删除 4 种类型的填充?是否可以选择使用 find 来删除所有不属于 *.dlg 扩展名的填充?

答案1

不加引号*.txt是不好的。参见find使用通配符时实用程序不会输出所有文件

可以将这 4 个命令合并为一个吗?

是的。请参阅将多个find命令合并为一个

find . \( -name '*.txt' -o -name '*.xml' -o -name '*.pdbqt' \) …

(这里使用了 3 种模式,因为您的第四个命令重复了第一个命令,并且没有必要两次使用相同的模式。)

是否可以另外使用find来删除所有不属于*.dlg扩展名的文件?

是的(我假设你想要的是常规文件,而不是全部文件):

find . -type f ! -name '*.dlg'        # -delete

如果上述命令打印出您真正想要删除的文件,那么使用#removed 运行它。

测试! -name '*.dlg'是否定的-name '*.dlg'。当且仅当-name '*.dlg'失败时,测试才会成功。

-delete在问题中使用了,因此您的答案find显然支持它。 功能较弱的用户find会看到find-exec rm {} \;vs -delete.——为什么前者被广泛推荐?

注意,在你的情况下 bare 的find工作方式类似于find .。我find .明确地使用是因为 的一些实现find需要命令行中至少有一个路径。

相关内容