Переименование части имени файла [дубликат]
этот вопрос уже есть ответ здесь:
- переименовать несколько файлов в Unix 20 ответов
у меня есть куча файлов, которые выглядят так:
DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat
и я хочу, чтобы они выглядеть так:
DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat
Как я могу это сделать?
6 ответов:
есть несколько вариантов команды переименования, в вашем случае это может быть так же просто, как
rename ABC XYZ *.dat
у вас может быть версия, которая принимает регулярное выражение Perl;
rename 's/ABC/XYZ/' *.dat
for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done
нет
rename
илиsed
нужны. Просто Баш расширения параметр.
что-то подобное сделаю. Элемент
for
цикл может потребоваться изменить в зависимости от того, какие имена файлов вы хотите захватить.for fspec1 in DET01-ABC-5_50-*.dat ; do fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/') mv ${fspec1} ${fspec2} done
вы всегда должны проверить эти скрипты на копии ваши данные, кстати, и в совершенно разных каталогах.
вам нужно научиться использовать sed http://unixhelp.ed.ac.uk/CGI/man-cgi?sed
а также использовать для того, чтобы вы могли перебирать записи в файлеhttp://www.cyberciti.biz/faq/bash-for-loop/
ваша команда будет выглядеть примерно так, у меня нет термина рядом со мной, поэтому я не могу проверить
for i in `dir` do mv $i `echo $i | sed '/orig/new/g'`
Мне нравится делать это с sed. В вашем случае:
for x in DET01-*.dat; do echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "" "DET01-XYZ-.dat"/' done | sh -e
лучше сначала опустить часть "sh-e", чтобы увидеть, что будет выполнено.
все эти ответы просты и хороши. Тем не менее, мне всегда нравится добавлять интерактивный режим к этим скриптам, чтобы я мог найти ложные срабатывания.
если [[- n $inInteractiveMode]]
тогда
echo-e-n " $oldFileName => $newFileName\nDo вы хотите сделать это изменение? [Y/n]:"
прочитать запустить[[- z $run | | "$run "= = " y "| | "$run "= = "Y"]] & & mv" $oldFileName "" $newFileName"
интернетили сделайте интерактивный режим по умолчанию и добавьте флаг силы (- f | --force) для автоматических сценариев или если вы чувствуете себя смелым. И это не замедляет вас слишком сильно: ответ по умолчанию "да, я хочу переименовать", поэтому вы можете просто нажать клавишу ввода в каждом приглашении (из-за ` - z $run