Прежде всего, я хотел бы сказать, что я знаю, что это почти точный дубликат некоторых сообщений, которые я прочитал, но им не удавалось ссылаться.Использование sed и mv для добавления символов в файлы
У меня есть более 100 файлов, которые следуют очень строгому соглашению об именах 5_##_<name>.ext
. Моя проблема заключалась в том, что когда я делал эти файлы изначально, я не понял, что 5_100_
и выше испортили бы мой заказ.
Теперь я пытаюсь добавить 0 перед каждым номером между 01 и 99. Я написал сценарий bash, используя sed, который работает для содержимого файла (также имя файла находится в файле):
#!/bin/bash
for fl in *.tcl; do
echo Filename: $fl
#sed -i 's/5_\(..\)_/5_0\1_/g' $fl
done
Однако это только изменяет содержимое, а не само имя файла. Я прочитал, что mv - это решение (rename
проще, но у меня его нет в моей системе). Мое текущее воплощение моих многочисленных попыток:
mv "$fl" $(echo "$file" | sed -e 's/5_\(..\)_/5_0\1_/g')
, но он дает мне ошибку: mv: missing destination file operand after <filename>
Опять же, я сожалею о дубликатах, но я не смог решить мою проблему, прочитав его. Я уверен, что использую только комбинацию mv
и sed
.
Решение было введено в комментариях. Я использовал $ file вместо $ fl.
Попробуйте 'эхо "$ фл"' вместо 'эхо "$ файл"' в 'mv' команды. – Wintermute
Я буквально самый худший. Спасибо. Если вы оставите этот комментарий в качестве ответа, я бы хотел его выбрать и закрыть. – Joshua