如何在目录和文件名中查找模式并仅在为父目录找到模式时才对文件执行重命名?
How do I Find patterns in both the Directory and Filename and perform a rename on the file only if the pattern is found for the parent directory?
我想做的是重命名文件,但前提是这些文件的父目录与给定模式匹配。
我特别想做的是,当partent目录是cd1或cd2时,然后在文件名的开头插入1_或2_。
例如我有:
./Documentary/Arctic/cd1/01 - Penguin
./Documentary/Arctic/cd1/02 - Polarbear
./Documentary/Arctic/cd2/01 - Whale
./Documentary/Arctic/cd2/02 - Walrus
./Documentary/Jungle/01 - Tiger
./Documentary/Jungle/02 - Monkey
我想将其更改为:
./Documentary/Arctic/cd1/1_01 - Penguin
./Documentary/Arctic/cd1/1_02 - Polarbear
./Documentary/Arctic/cd2/2_01 - Whale
./Documentary/Arctic/cd2/2_02 - Walrus
./Documentary/Jungle/01 - Tiger
./Documentary/Jungle/02 - Monkey
我做过类似的替换,例如下面的那个,但是它没有考虑父目录:
将“1 - 10 集名称”重命名为“1_10 集名称”:
find . -type f -name '[[:digit:]] - [[:digit:]][[:digit:]] *' -execdir prename -n 's/(.*\/\d) - (\d\d .*)/_/' {} +
更新: 我在这方面取得了一些进展。我现在可以使用“wholename”选项找到文件,我现在正在尝试重命名部分。
find . -depth -wholename '*/cd[[:digit:]]*/[[:digit:]][[:digit:]]*'
明白了,耶!这个对我来说很难,但是我在慢慢学习。
find . -depth -type f -iwholename '*/cd[[:digit:]]*/[[:digit:]][[:digit:]]*' -exec prename -n 's/(.*\/[cC][dD])(\d)(.*\/)(\d\d .*)/_/g' {} +
此外,如果您想将重命名的文件向上移动一个级别:
find . -depth -type f -iwholename '*/cd[[:digit:]]*/[[:digit:]]_[[:digit:]][[:digit:]]*' -execdir mv {} .. \;
我想做的是重命名文件,但前提是这些文件的父目录与给定模式匹配。
我特别想做的是,当partent目录是cd1或cd2时,然后在文件名的开头插入1_或2_。
例如我有:
./Documentary/Arctic/cd1/01 - Penguin
./Documentary/Arctic/cd1/02 - Polarbear
./Documentary/Arctic/cd2/01 - Whale
./Documentary/Arctic/cd2/02 - Walrus
./Documentary/Jungle/01 - Tiger
./Documentary/Jungle/02 - Monkey
我想将其更改为:
./Documentary/Arctic/cd1/1_01 - Penguin
./Documentary/Arctic/cd1/1_02 - Polarbear
./Documentary/Arctic/cd2/2_01 - Whale
./Documentary/Arctic/cd2/2_02 - Walrus
./Documentary/Jungle/01 - Tiger
./Documentary/Jungle/02 - Monkey
我做过类似的替换,例如下面的那个,但是它没有考虑父目录:
将“1 - 10 集名称”重命名为“1_10 集名称”:
find . -type f -name '[[:digit:]] - [[:digit:]][[:digit:]] *' -execdir prename -n 's/(.*\/\d) - (\d\d .*)/_/' {} +
更新: 我在这方面取得了一些进展。我现在可以使用“wholename”选项找到文件,我现在正在尝试重命名部分。
find . -depth -wholename '*/cd[[:digit:]]*/[[:digit:]][[:digit:]]*'
明白了,耶!这个对我来说很难,但是我在慢慢学习。
find . -depth -type f -iwholename '*/cd[[:digit:]]*/[[:digit:]][[:digit:]]*' -exec prename -n 's/(.*\/[cC][dD])(\d)(.*\/)(\d\d .*)/_/g' {} +
此外,如果您想将重命名的文件向上移动一个级别:
find . -depth -type f -iwholename '*/cd[[:digit:]]*/[[:digit:]]_[[:digit:]][[:digit:]]*' -execdir mv {} .. \;