将目录结构从 /YEAR/MONTH/DAY/ 更改为 /YEAR-MONTH-DAY

Ola*_*Ola 1 command-line bash regex directory batch-rename

我需要将照片的目录结构从 /YEAR/MONTH/DAY/ 更改为 /YEAR-MONTH-DAY

我知道这可以通过 来完成exiftool,但它只适用于包含 EXIF 标签的文件,并且我有与每个图像对应的 xmp-sidecar 文件,这些文件也需要一起提供。所以我侦察某种脚本将是最好的方法。

我坐下来尝试学习 RegEx、sedbash 等等,如果有足够的时间,我想我应该能够解决这个问题,但现在我很着急,所以任何帮助将不胜感激。

//奥拉

Oli*_*Oli 5

Ubuntu 中的实用程序rename可以重命名目录结构,但它不会自行清理。

\n\n
rename \'s#(.+)/(.+)/(.+)#$1-$2-$3#\' */*/*/\n
Run Code Online (Sandbox Code Playgroud)\n\n

-vn如果您只是想让它在重命名任何内容之前告诉您它将做什么,请坚持到底,但这里有一个小测试工具,可以向您展示什么是可能的:

\n\n
$ mkdir -p 2014/06/15\n$ touch 2014/06/15/photo_{001..003}.jpg\n$ tree\n.\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2014\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 06\n        \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 15\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 photo_001.jpg\n            \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 photo_002.jpg\n            \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 photo_003.jpg\n\n$ rename \'s#(.+)/(.+)/(.+)#$1-$2-$3#\' */*/*/\n$ tree\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 2014\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 06\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 2014-06-15\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 photo_001.jpg\n    \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 photo_002.jpg\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 photo_003.jpg\n
Run Code Online (Sandbox Code Playgroud)\n\n

简单地说,它被送入第三级目录,重命名就是读取前两段并重命名,将其粘贴到当前目录中。正如您所看到的,将会有大量年份目录。假设它们是空的,你可以用类似的东西清理(我祈祷你先检查它们是空的):

\n\n
find -maxdepth 1 -type d -regex \'\\./[0-9][0-9][0-9][0-9]\' -exec rm -irf "{}" \\;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在使用 -i 选项强制它在删除每个文件之前询问您。删除它需要您自担风险。

\n