我有一项练习,必须删除所有不是的文件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 文件都将被删除。file
image/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
这将向您显示使用该操作时将删除哪些文件。