我会尝试将之前的帖子串联起来,以完成此任务。 目录树如下:
TEST
|ABC_12345678
3_XYZ
|ABC_23456789
3_XYZ
etc
每个名为“TEST”的父文件夹中的每个文件夹始终以ABC_\d{8}开头,其中8个数字始终不同。在文件夹ABC_\d{8}中,始终有一个名为3_XYZ的文件夹,其中始终有一个名为“MD2_Phd.txt”的文件。目标是使用在ABC文件夹名称中找到的特定8位数字ID重命名每个“MD2_PhD.txt”文件,即“\d{8}_PhD.txt”。
在各种帖子的不同代码上进行了几次迭代后,这是我能想出的最好的代码。
cd /home/etc/Desktop/etc/TEST
find -type d -name 'ABC_(\d{8})' |
find $d -name "*_PhD.txt" -execdir rename 's/MD2$/$d/' "{}" \;
done
find
将接受多个目录作为起点,因此find $( find -type d -name 'ABC_(\d{8})' ) -name "*_PhD.txt" -execdir rename 's/MD2$/$d/' "{}" \;
(无需done
)可能有效,除非您的文件或目录名称中有未显示的空格。 没有时间测试。其他答案看起来稍微更简单;-)。祝好运。 - shellter