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