Переименовать часть имени файла

Извините за должным глупый вопрос, но я довольно новичок. У меня много файлов, которые выглядят так:

DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat

и я хочу, чтобы они выглядели следующим образом:

DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat

как я могу это сделать? Я пробовал несколько вещей с этого форума, но я, кажется, ошибаюсь. Спасибо за вашу помощь!

Ответ 1

Существует несколько вариантов команды переименования, в вашем случае это может быть так же просто, как

rename ABC XYZ *.dat

У вас может быть версия, которая принимает регулярное выражение Perl;

rename 's/ABC/XYZ/' *.dat

Ответ 3

Что-то вроде этого это сделает. Может потребоваться изменение цикла for в зависимости от того, какие имена файлов вы хотите записать.

for fspec1 in DET01-ABC-5_50-*.dat ; do
    fspec2=$(echo ${fspec1} | sed 's/-ABC-/-XYZ-/')
    mv ${fspec1} ${fspec2}
done

Вы должны всегда проверять эти сценарии на копии ваших данных, кстати, и в совершенно разных каталогах.

Ответ 4

Вам нужно научиться использовать 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'`

Ответ 5

Мне нравится делать это с sed. В вашем случае:

for x in DET01-*.dat; do
    echo $x | sed -r 's/DET01-ABC-(.+)\.dat/mv -v "\0" "DET01-XYZ-\1.dat"/'
done | sh -e

Лучше сначала опустить часть "sh -e", чтобы увидеть, что будет выполнено.

Ответ 6

Все эти ответы просты и хороши. Тем не менее, мне всегда нравится добавлять в эти сценарии интерактивный режим, чтобы я мог найти ложные срабатывания.

если [[-n $inInteractiveMode]]
затем
    echo -e -n "$ oldFileName = > $newFileName\nВы хотите сделать это изменение? [Y/n]:"
  read run

  [[-z $run || "$ run" == "y" || "$ run" == "Y" ]] && & && mv "$ oldFileName" "$ newFileName"
ц

Или сделайте интерактивный режим по умолчанию и добавьте флаг силы (-f | --force) для автоматизированных скриптов или если вы чувствуете смелость. И это не слишком сильно задерживает вас: ответ по умолчанию "да, я хочу переименовать", чтобы вы могли просто нажать клавишу ввода в каждом приглашении (из-за теста `` -z $run \.