删除所有非 jpeg 文件

删除所有非 jpeg 文件

我有一项练习,必须删除所有不是的文件jpeg

我试过了find -type f |xargs file| grep -iv 'jpeg',但是没有用。

答案1

根据文件 mimetype 删除

要删除当前目录或其子目录中的所有非 jpeg 常规文件,请使用:

find . -type f -exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;

这种方法对所有文件名都是安全的。即使文件名中有换行符或其他难懂的字符,它也能正常工作。

怎么运行的

  • find . -type f

    这将启动一个find命令,将找到的文件限制为常规文件-type f

  • -exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;

    对于找到的所有文件,这将运行 bash 命令来测试文件的类型。特别是,如果报告文件具有 mimetype ,file -bi "$1" | grep -q image/jpeg则将返回 true 。操作员确保后面的命令仅针对未通过 jpeg 测试的文件执行。因此,所有非 jpeg 文件都将被删除。fileimage/jpeg||rm

根据文件名删除

删除所有名称为不是结束于.jpeg

find . -type f ! -name '*.jpeg' -delete

这种方法对所有文件名都是安全的。即使文件名中有换行符或其他难懂的字符,它也能正常工作。

怎么运行的

  • find .

    查找当前目录及其子目录中的所有文件

  • -type f

    仅限于常规文件

  • ! -name '*.jpeg'

    -name '*.jpeg'会找到所有以 结尾的文件.jpeg。但是感叹号!表示否定。因此,! -name '*.jpeg'将搜索范围限制为以 结尾的文件。不是結束于.jpeg

  • -delete

    这告诉find删除符合上述条件的文件。

测试

要测试该命令,请删除-delete

find . -type f ! -name '*.jpeg'

-delete这将向您显示使用该操作时将删除哪些文件。

相关内容