要删除当前目录或其子目录中的所有非 jpeg 常规文件,请使用:
find . -type f -exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;
Run Code Online (Sandbox Code Playgroud)
这种方法对所有文件名都是安全的。即使文件名中有换行符或其他困难的字符,它也能工作。
find . -type f
这将启动一个find命令,将找到的文件限制为常规文件-type f.
-exec bash -c 'file -bi "$1" | grep -q image/jpeg || rm "$1"' none {} \;
对于找到的所有文件,这将运行 bash 命令来测试文件的类型。特别是,file -bi "$1" | grep -q image/jpeg如果file报告文件具有 mimetype ,则返回 true image/jpeg。操作员||确保rm仅对未通过 jpeg 测试的文件执行随后的命令。因此,所有非 jpeg 文件都将被删除。
要删除名称不以结尾的所有文件.jpeg:
find . -type f ! -name '*.jpeg' -delete
Run Code Online (Sandbox Code Playgroud)
这种方法对于所有文件名也是安全的。即使文件名中有换行符或其他困难的字符,它也能工作。
find .
查找当前目录及其子目录中的所有文件
-type f
仅限于常规文件
! -name '*.jpeg'
-name '*.jpeg'将查找名称以.jpeg. !然而,感叹号表示否定。因此,! -name '*.jpeg'将我们的搜索限制为名称不以.jpeg.
-delete
这告诉find删除符合上述条件的文件。
要测试命令,请省略-delete:
find . -type f ! -name '*.jpeg'
Run Code Online (Sandbox Code Playgroud)
这将显示-delete使用该操作时将删除哪些文件。
| 归档时间: |
|
| 查看次数: |
2834 次 |
| 最近记录: |