如何递归删除当前目录中特定扩展名的所有文件?

如何递归删除当前目录中特定扩展名的所有文件?

如何.bak使用一个命令行安全地从当前目录和所有子文件夹中删除所有具有特定扩展名(例如)的文件?很简单,我不敢使用,rm因为我曾经用错了一次,现在我需要建议。

答案1

rm如果你害怕的话,在这种情况下你甚至不需要使用。使用find

find . -name "*.bak" -type f -delete

但使用时请谨慎。首先运行:

find . -name "*.bak" -type f

来准确了解您要删除的文件。

还,确保这-delete是最后一个参数在您的命令中。如果您将其放在 之前-name *.bak argument它将删除所有内容

man findman rm有关详细信息,另请参阅 SE 上的相关问题:

答案2

首先运行命令shopt -s globstar。您可以在命令行上运行该命令,它只会在该 shell 窗口中生效。您可以将其放在 中.bashrc,然后所有新启动的 shell 都会选择它。该命令的效果是递归**/匹配当前目录及其子目录中的文件(默认情况下,**/与 : 的含义相同*/,仅在直接子目录中)。然后:

rm **/*.bak

(或者gvfs-trash **/*.bak或者你有什么)。

答案3

find . -name "*.bak" -type f -print0 | xargs -0 /bin/rm -f

答案4

如果要删除某种类型的所有文件,但只删除当前文件夹“深处”的 1 个文件夹:

find . -maxdepth 2 -name "*.log" -type f -delete

-最大深度 2因为当前目录““算作第一个文件夹。

相关内容