如何从文件夹及其所有子文件夹中删除具有特定扩展名的所有文件?

我想从我的音乐文件夹中删除所有.jpg文件,以节省空间。 我的音乐文件夹包含子文件夹,我想知道是否有命令从所有这些文件夹中删除所有.jpg文件,无论其级别如何。 谢谢你的帮助!

最简单的方法(如果您使用的是Ubuntu Desktop):

转到Nautilus中的音乐文件夹,按Ctrl + F并搜索.jpg

在此处输入图像描述 然后删除它


您还可以更改位置,以便更具体地进行搜索。

在此处输入图像描述


更新

搜索.jpg后更具体点击绿色按钮Select File type Picture然后仅从搜索中删除jpg . 点然后reload ,如下图所示

它的作用是搜索图片文件,如.jpg .png .gif和所有其他Picture Format文件

在此处输入图像描述

命令行的快速而干净的解决方案将是

 cd  find . -type f -iname \*.jpg -delete 
  • . 告诉我开始在当前文件夹中搜索。
  • -type f告诉find只查找文件。
  • -iname使搜索大小写不敏感。
  • -delete告诉find删除/删除找到的所有文件。

我建议首先运行不带-delete的命令,以获取在命令中包含-delete时将删除的文件列表。 这样一个小错字不会删除你不想要的任何东西。

有关如何使用find及其function的更多信息,请参阅man find

请注意,使用-delete时, find不会产生任何输出。

关于多个扩展的评论

find . -type f \( -name \*jpg -o -name \*png \) -delete

  • ( .. )组表达。 需要从shell中转义,因此在示例中为\( .. \)
  • -o逻辑或

因此,上面的示例将匹配任何在其名称末尾有jpgpng文件。 可以以相同的方式添加更多扩展。 只要确保在每个-name语句之间记住-o ,如果未指定-o ,则find将默认为-a (和),由于文件不能同时以jpgpng结尾,因此无效。

这应该做到这一点

 sudo rm -rf -d ~/Music/*.JPG 

这将删除Music文件夹中的所有.JPG文件。

Bash的shopt -s globstar在这里可用于递归globbing:

 bash-4.3$ tree . ├── 10.jpg └── subfolder ├── 5.jpg └── another_subfolder └── 15.jpg 2 directories, 3 files bash-4.3$ shopt -s globstar bash-4.3$ rm ./**/*.jpg bash-4.3$ tree . └── subfolder └── another_subfolder