我正在使用这个小脚本来查找格式错误的图像:
find -name '*.jpg' -exec identify -format "%f\n" {} \; 2>errors.txt
Run Code Online (Sandbox Code Playgroud)
它工作得很好,但现在我需要稍微修改它。我不想将 stderr 转储到 errors.txt,而是想转储触发错误的图像的文件名 (%f)。也就是说,我想要errors.txt 中格式错误的图像文件的列表,而不是列表错误消息。
我尝试添加 || echo "%f" >> errors.txt 到 -exec 部分,但这不起作用。什么是最好的方法来做到这一点?
这会找到格式错误的图像并将其名称存储在names.txt
:
find -name '*.jpg' -exec bash -c 'identify "$1" &>/dev/null || echo "$1">>names.txt' none {} \;
Run Code Online (Sandbox Code Playgroud)
find -name '*.jpg'
这会find
像往常一样启动。
-exec bash -c 'identify "$1" &>/dev/null || echo "$1" >>names.txt' none {} \;
这identify
在每个文件上运行,如果identify
返回非零错误代码,它将文件名回显到names.txt
.
bash -c '...' none {}
使 bash shell 运行引号中的命令,并将文件名{}
分配给位置参数$1
。
出于好奇,该字符串none
被分配给$0
. 除非bash 生成错误,否则$0
不会使用它,在这种情况下,它将作为程序名称出现在错误消息中。
我尝试添加
|| echo "%f" >> errors.txt
到 -exec 部分,但这不起作用。什么是最好的方法来做到这一点?
微妙之处在于||
必须对identify
命令进行操作。为此,我们需要放入identify
一个外壳,例如使用bash -c
如上所示。
归档时间: |
|
查看次数: |
1999 次 |
最近记录: |