如何改变文件名的表达方式?

如何改变文件名的表达方式?

我有包含多个文件的文件夹。我想更改名称中的表达式。

例如:

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/' '{}' \;

/如果字符串后面有任何字符,则可以避免匹配该字符串。

相关内容