如何解决按 EXIF 数据相机模型查找和排序图像几乎有效
正如标题所说,我正在尝试根据用于拍摄它们的相机对文件夹中的图像进行排序。我一直在努力学习如何使用管道和 xargs,我想我快到了。唯一的问题是最后一个 xargs 似乎只在 awk 穿过整个文件夹而不是每个文件时才执行。如果我这样做:
find temp/sorted/jpg_over_300px/ -type f -exec identify -quiet -format '%[EXIF:model] %i \n' '{}' \; | gawk '$2=="SE" {print $3}'
我得到了很好的干净结果,找到了新的行,并且 exif 相机型号与 iPhone SE 的“SE”匹配。但是,如果我添加一个 xargs -I % mv % [new_folder]
命令将文件移动到不同的文件夹,则 mv 只有在所有文件夹都被完全扫描后才会执行(我知道是因为我尝试过一个只包含一个文件的文件夹)。>
find temp/sorted/jpg_over_300px/ -type f -exec identify -quiet -format '%[EXIF:model] %i \n' '{}' \; | gawk '$2=="SE"{print $3}' | xargs -I % mv % temp/sorted/jpg_iphone_se/
我想避免这种情况,因为我的文件夹中有很多文件,我想避免出现“参数过多”的情况。我曾尝试将 -print0 添加到 find 并将 -0 添加到 xargs 但没有运气。
感谢您的时间
解决方法
排序,感谢[这个问题][https://unix.stackexchange.com/questions/336184/use-output-from-awk-as-input-for-mv]
我还做了一些清理和 stderr 重定向,只向 awk 发送有效请求。
find temp/sorted/jpg_over_300px/ -type f -exec identify -format '%[EXIF:model] %i\n' '{}' \; 2> /dev/null | awk '/iPhone 5S/ {system("cp "$3" temp/sorted/jpg_iphone_5s")}'
对于像我一样正在学习的人,这里是一步一步:
find temp/sorted/jpg_over_300px/ -type f -exec identify -format '%[EXIF:model] %i\n' '{}' \;
使用命令 find
,查看文件夹 temp/sorted/jpg_over_300px/
中只有 -type f
的文件,每次找到时执行命令 identify -exec identify
以提取有关模型的 exif 数据相机的 -format '%[EXIF:model]'
和文件 '%i' 的名称加上换行符 \n
以将格式正确的结果发送到管道的其余部分。在继续处理管道的其余部分之前,我们通过将 stderr 重定向到一个黑洞 2>/dev/null
来消除错误消息,然后我们通过管道进入 awk | awk
,它将在通过管道传输的数据中寻找 iPhone SE '/iPhone 5S/
并执行系统命令cp 将文件复制到新文件夹{system("cp "$3" temp/sorted/jpg_iphone_5s")}'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。