У меня есть папки с несколькими файлами в них. Существует выражение на имена, которые я хотел бы изменить.
Например:
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/' {} \;
Но это не работает.Что мне делать?
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/' '{}' \;
, Это старается не соответствовать строке, если существует /
символ где-нибудь после него.