Как изменить выражение в имени файла?

У меня есть папки с несколькими файлами в них. Существует выражение на имена, которые я хотел бы изменить.

Например:

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

Но это не работает.Что мне делать?

5
задан 13 April 2017 в 01:30

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

, Это старается не соответствовать строке, если существует / символ где-нибудь после него.

6
ответ дан 23 November 2019 в 09:12

Другие вопросы по тегам:

Похожие вопросы: