【发布时间】:2018-04-10 03:39:24
【问题描述】:
一直在尝试为这项任务拼凑一些以前的帖子。 目录树如下所示:
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
【问题讨论】:
-
所有文件的
3_XYZ文件夹是否总是静态名称? -
是的,该文件夹在 ABC 中始终命名为 3_XYZ。
-
find将接受多个目录作为起点,因此find $( find -type d -name 'ABC_(\d{8})' ) -name "*_PhD.txt" -execdir rename 's/MD2$/$d/' "{}" \;(不需要done)。可能有效,除非您的文件或目录名称中有空格,您没有在此处显示。没时间测试。其他答案看起来稍微更直接;-)。祝你好运。