如果问题标题不够丰富,我很抱歉。请随时提出一个更好的变体。find,xargs:为每个文件执行命令链
我想执行以下任务: 在一个目录中,我有一些文件是JPEG格式的照片。我想从EXIF中提取这些照片拍摄的日期,为每个日期创建一个新目录,并将文件移动到相关目录。
(EXIF日期和时间的格式为YYYY:MM:DD hh:mm:ss
,和我想要的目录名被格式化为YYYY-MM-DD
,这就是为什么我使用SED)
我那种知道如何分别执行各自的那些任务,但没能把他们放在一起。我花了一些时间研究如何使用find
与-exec
或xargs
执行命令,但仍未能理解如何正确链接所有内容。
最后我是能够使用两个命令来完成我的任务:
find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
| sed 's/ [0-9:]*//; s/:/-/g' | xargs mkdir -p" \;
find . -name '*.jpg' -exec sh -c "identify -format %[exif:DateTimeOriginal] {}
| sed 's/ [0-9:]*//; s/:/-/g; s/$/\//' | xargs mv {}" \;
,但我不喜欢重复,我不喜欢-exec sh -c
。有没有正确的方法来做到这一点,而不使用-exec sh -c
?