如何更改文件名中的表达式?

p.d*_*man 5 command-line bash find rename batch-rename

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

例如:

find /path/ -type f -name '*0050ABC_01032013*'
Run Code Online (Sandbox Code Playgroud)

给我一个这样的输出:

/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
Run Code Online (Sandbox Code Playgroud)

我想将 0050ABC_01032013 更改为 0044CBA_01011901。

我试过这个:

find /path/ -type f -name '*0050ABC_01032013*' -execdir rename s/\.\/(w+)0050ABC_01032013(w+)$/$10044CBA_01011901$2/' {} \;
Run Code Online (Sandbox Code Playgroud)

但它不起作用。我该怎么办?

Zan*_*nna 6

rename不是那么棘手 :) 只需指定您要更改的部分,其余部分就不用管了。使用g修改所有出现在路径(包括目录名)

find /path/ -type f -name '*0050ABC_01032013*' -exec rename -n 's/0050ABC_01032013/0044CBA_01011901/g' '{}' \;
Run Code Online (Sandbox Code Playgroud)

-n测试后删除以真正重命名文件

find /path/ -type f -name '*0050ABC_01032013*' -exec rename 's/0050ABC_01032013/0044CBA_01011901/g' '{}' \;
Run Code Online (Sandbox Code Playgroud)

如果您在使用相同名称的路径的目录里,你希望更改目录名,就可以确保只有基本名称被修改这样的

find /path/ -type f -name '*0050ABC_01032013*' -exec rename -n 's/0050ABC_01032013([^\/]*)$/0044CBA_01011901$1/' '{}' \;
Run Code Online (Sandbox Code Playgroud)

如果字符串/后面有任何字符,这将避免匹配字符串。