Ответ 1
Существует несколько вариантов команды переименования, в вашем случае это может быть так же просто, как
rename ABC XYZ *.dat
У вас может быть версия, которая принимает регулярное выражение Perl;
rename 's/ABC/XYZ/' *.dat
Извините за должным глупый вопрос, но я довольно новичок. У меня много файлов, которые выглядят так:
DET01-ABC-5_50-001.dat
...
DET01-ABC-5_50-0025.dat
и я хочу, чтобы они выглядели следующим образом:
DET01-XYZ-5_50-001.dat
...
DET01-XYZ-5_50-0025.dat
как я могу это сделать? Я пробовал несколько вещей с этого форума, но я, кажется, ошибаюсь. Спасибо за вашу помощь!
Существует несколько вариантов команды переименования, в вашем случае это может быть так же просто, как
rename ABC XYZ *.dat
У вас может быть версия, которая принимает регулярное выражение Perl;
rename 's/ABC/XYZ/' *.dat
for file in *.dat ; do mv $file ${file//ABC/XYZ} ; done
Нет rename
или sed
. Просто bash расширение параметра.
Что-то вроде этого это сделает. Может потребоваться изменение цикла 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 "\0" "DET01-XYZ-\1.dat"/'
done | sh -e
Лучше сначала опустить часть "sh -e", чтобы увидеть, что будет выполнено.
Все эти ответы просты и хороши. Тем не менее, мне всегда нравится добавлять в эти сценарии интерактивный режим, чтобы я мог найти ложные срабатывания.
если [[-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 \
.