我有包含多个文件的文件夹。我想更改名称中的表达式。
例如:
find /path/ -type f -name '*0050ABC_01032013*'
给出如下输出:
/path/0050ABC_01032013/t1mri/T1pre_2013-3-1/default_analysis/segmentation/mesh/0050ABC_01032013_Rhemi.gii.minf
/path/0050ABC_01032013/t1mri/T1pre_2013-3-1/default_analysis/segmentation/Lcortex_0050ABC_01032013.nii
/path/0050ABC_01032013/t1mri/T1pre_2013-3-1/default_analysis/segmentation/Lgrey_white_0050ABC_01032013.nii.minf
/path/0050ABC_01032013/ct/CTpost_2013-3-1/registration/CT-0050ABC_01032013_CTpost_2013-3-1_TO_Scanner_Based.trm
我想将 0050ABC_01032013 更改为 0044CBA_01011901。
我尝试过这个:
find /path/ -type f -name '*0050ABC_01032013*' -execdir rename s/\.\/(w+)0050ABC_01032013(w+)$/$10044CBA_01011901$2/' {} \;
但它不起作用。我该怎么办?
答案1
rename
不是那么棘手 :) 只需指定要更改的部分,其余部分将保持不变。用于g
修改路径中的所有出现项(包括目录名称)
find /path/ -type f -name '*0050ABC_01032013*' -exec rename -n 's/0050ABC_01032013/0044CBA_01011901/g' '{}' \;
测试后删除-n
确实重命名的文件
find /path/ -type f -name '*0050ABC_01032013*' -exec rename 's/0050ABC_01032013/0044CBA_01011901/g' '{}' \;
如果你在路径中某处有一个同名的目录,并且你不要想要更改目录名称,您可以确保只有基本名称被修改,如下所示
find /path/ -type f -name '*0050ABC_01032013*' -exec rename -n 's/0050ABC_01032013([^\/]*)$/0044CBA_01011901$1/' '{}' \;
/
如果字符串后面有任何字符,则可以避免匹配该字符串。