无法重命名,没有此类文件或目录

时间:2018-02-21 18:41:29

标签: bash macos terminal

我有一个根文件夹(03_COMPLETE),里面有40个子文件夹,两个级别(全部称为CHILD_PNG),包含我要重命名的.png文件。我必须完成6个完整的文件夹,包含数万个文件。目前所有文件的名称都是这样的: 123456_lifestyle.png ,我希望它们命名为 lifestyle_123456.png

我的代码:

find . -mindepth 2 -type f -iname '*.png' -print0 | xargs -0 /usr/local/bin/rename -v 's/\/([0-9]+)_([A-Za-z]+[0-9])/\/$2_$1/'\;

如果我在.png文件的单个文件夹上运行它(不使用-mindepth),则重命名它们。但是,如果我在根03_COMPLETE目录上运行它以尝试立即执行所有重命名,我会得到如下错误:

  

无法重命名   ' /Volumes/COMMON-LIC-PHOTO/RETOUCHING/04_DELIVERY_PNG/Computer1/03_COMPLETE/06052017_NYS5_W_1263_Output/CHILD_PNG/123456_lifestyle.png'   至   ' /Volumes/COMMON-LIC-PHOTO/RETOUCHING/04_DELIVERY_PNG/Computer1/03_COMPLETE/NYS5_06052017_W_1263_Output/CHILD_PNG/123456_lifestyle.png' ;:   没有这样的文件或目录

我认为它可能与1级文件夹的名称有关(例如,这里是NYS5_06052017_W_1263_Output),因为它确实在名为Bustform_000的几个文件夹上重命名。大多数文件夹虽然以06052017之类的数字开头。

我无法弄清楚为什么这会在.png文件夹级别工作,但不会在根文件夹上工作,以及为什么它会在几个文件夹中重命名,但大部分文件都会赢得&#39 ;吨

另外奇怪的是,在错误中它表示它正在尝试将 123456_lifestyle.png 重命名为相同的文件名。为什么会这样做?有什么想法吗?

3 个答案:

答案 0 :(得分:1)

这可能会有所帮助:

find 03_COMPLETE -type f | xargs -n 1 rename -n 's|/([^_/]*)_([^_/]*).png$|/$2_$1.png|'

如果输出正常,请删除-n

答案 1 :(得分:1)

您可以将目录更改为每个CHILD_PNG目录,并在所有文件中运行单个rename,这样您就不会为每个文件执行新的rename

find 03_COMPLETE -type d -name CHILD_PNG -execdir bash -c "cd {}; rename -n '...' *.png" \;

答案 2 :(得分:0)

原始正则表达式的问题是,它匹配“xxxxx_yyyyy”形式的目录名称,并尝试将它们转换为“yyyyy_xxxxx”,当然,它不存在。由于您只想更改文件名,并且所有文件名都以.png结尾,因此您可以使用下面的Regex。此外,当您尝试匹配文字“/”时,您可以选择其他字符,例如“|”作为分隔符,使正则表达式更容易阅读

's|/([0-9]+)_([A-Za-z]+[0-9]*)(\.[Pp][Nn][Gg])|/$2_$1$3|'