Переименование части имени файла [дубликат]


этот вопрос уже есть ответ здесь:

у меня есть куча файлов, которые выглядят так:

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 72

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