递归查找将目录名称附加到任何文件

时间:2018-06-06 21:30:49

标签: linux

非常感谢任何帮助!

我需要一种方法将父目录名称附加到任何路径中的任何文件。

当前目录树的示例

left join

目标

/Hawaii/Surfing/800x600/picture1.jpg  
/Hawaii/Surfing/800x600/picture2.jpg  
/Hawaii/Surfing/800x600/picture3.jpg
/RockClimbing/SouthAfrica/TableMountain/4096x2160/Picture1.jpg
/RockClimbing/SouthAfrica/TableMountain/4096x2160/Picture2.jpg
/RockClimbing/SouthAfrica/TableMountain/4096x2160/Picture3.jpg

我已经找到了一些这样的例子,但是用户都设置了目录深度,遗憾的是我有很多不同级别的文件。

/Hawaii/Surfing/800x600/picture1.800x600.jpg  
/Hawaii/Surfing/800x600/picture2.800x600.jpg   
/Hawaii/Surfing/800x600/picture3.800x600.jpg  
/RockClimbing/SouthAfrica/TableMountain/4096x2160/Picture1.4096x2160.jpg
/RockClimbing/SouthAfrica/TableMountain/4096x2160/Picture2.4096x2160.jpg
/RockClimbing/SouthAfrica/TableMountain/4096x2160/Picture3.4096x2160.jpg

1 个答案:

答案 0 :(得分:0)

您的第一个捕获组正在匹配最后一个/之前的所有内容,而不仅仅是最后一个目录名称。使用/([^/]*)/代替/(.*)/,因此不会在/分隔符之间匹配。您也没有将文件名拆分为名称和扩展名,因此您不会在它们之间插入目录名称。

find dir -name *.jpg -exec rename -nv -- 's|([^/]*)/([^/]*)\.jpg$|$1/$2.$1.jpg|' {} +