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

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

我知道这可以用exiftool完成,但它只适用于包含EXIF标签的文件,并且我有与每个图像对应的xmp-sidecar文件,这些也需要出现。 因此,我会以某种方式重新编写脚本是最好的方法。

我坐下来试图学习RegEx, sed ,bash以及什么不是,并且给予足够的时间,我想我应该能够解决这个问题,但是现在我很匆忙,所以任何帮助都会受到赞赏。

//奥拉

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

 rename 's#(.+)/(.+)/(.+)#$1-$2-$3#' */*/*/ 

如果你只是希望它在重命名任何内容之前告诉你它将要做什么,最后坚持下去,但这里有一个小测试工具,告诉你什么是可能的:

 $ mkdir -p 2014/06/15 $ touch 2014/06/15/photo_{001..003}.jpg $ tree . └── 2014 └── 06 └── 15 ├── photo_001.jpg ├── photo_002.jpg └── photo_003.jpg $ rename 's#(.+)/(.+)/(.+)#$1-$2-$3#' */*/*/ $ tree . ├── 2014 │  └── 06 └── 2014-06-15 ├── photo_001.jpg ├── photo_002.jpg └── photo_003.jpg 

简单地说它正在被提供给第三级目录,并且重命名是读取前面的两个段并重命名它,将它粘贴在当前目录中。 正如您所看到的,会有一堆年份目录。 假设它们是空的,你可以用类似的东西清理(我祈祷你先检查它们是否为空):

 find -maxdepth 1 -type d -regex '\./[0-9][0-9][0-9][0-9]' -exec rm -irf "{}" \; 

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

 cd base # the trailing slash in the pattern limits the results to directories, not files for subdir in */*/*/; do # $subdir is now "year/mon/day/" subdir=${subdir%/} # remove the trailing slash newdir=${subdir//\//-} # replace all slashes with hyphens mkdir "$newdir" mv "$subdir"/* "$newdir" done 

试试这个:

  TOP=$PWD for y in *; do if cd $y; then for m in *; do if cd $m; then for d in *; do if cd $d; then mv $d $TOP/$y-$m-$d -R fi done cd .. && rmdir $m fi done cd .. && rmdir $y fi done 
 $ fn =“/ media / drive / folder / 2014/06/14 / name.jpg”;  \
 echo“mv $ fn $(echo $ fn | sed -re's,([0-9] +)/,\ 1-,g')”
 mv /media/drive/folder/2014/06/14/name.jpg /media/drive/folder/2014-06-14-name.jpg
 $ find -type f |  T恤LISTOFFILES.txt
 $ cat LISTOFFILES.txt | 而读p;  #循环遍历所有文件,一次一个
 f =“$ {p ## * /}”;  bn = $ {f %% \。*};  op =“$ {p%/ *} /”; 
 echo -e“$ f \ n $ bn \ n $ op”
 #$ p  - 原始文件的完整路径
 #$ f  - 带扩展名的文件名
 #$ bn  -  basename,不带扩展名的文件名
 #$ op  -  orignal PATH,文件名和扩展名被剥离

 #在此处添加您的转化 - 基于以上内容
 #mkdir -p“$ p”#可能需要
 #mv“$ p”“......”# 
 DONE

现在,如果您完全阅读上述内容,您将找到完成此任务所需的所有零碎内容。

因为我不知道你是怎么做到的,也不知道你想要什么 – 我无法为你完成它。

http://www.tldp.org/guides.html
有两个Bash指南可以阅读和浏览 – 有一个去。

我要把它留在这里。 这不是服务,我只是因为好奇而做到了。
请记住 – 那里可能存在故障,因为我没有完全测试过。
你可能会介绍你没想到的错误… 🙂

祝好运! ;-) 你需要它。