У меня есть набор файлов, названных в честь набора букв (c, f, s и w), например: cccf.png
, fsws.png
, и т.д. существует также файл, который я должен скопировать для соответствия этим именам a [back]
на имя, например: cccf[back].png
, fsws[back].png
, и т.д.
Я попробовал
for file in ./????.png; do
cp Back.png "$file"[back].png
done
который дал мне cccf.png[back].png
, fsws.png[back].png
. В то время как легкий, чтобы сделать массу переименовывают в gui (Xfce) для удаления .png
в середине это кажется немного избыточным.
Как я только захватываю ту часть имени файла, в котором я нуждаюсь, т.е. четыре буквы, добавляю [back]
и затем сохраните суффикс, поскольку я хочу сделать это для многих типов файлов и не быть ограниченным .png
.
Упростить, как я копирую файл так, чтобы имя вставило что-то в середину другого имени, уже оставив все файлы там нетронутыми?
Используйте расширение параметра оболочки на
удалите все до (в последний раз, если само имя файла содержит их), период, и сохраните результат как расширение
ext="${file##*.}"
удалите расширение, затем добавьте назад новый суффикс + расширение
backfile="${file%.*}[back].${ext}"
Напр.
file=cccf.png
ext="${file##*.}"
backfile="${file%.*}[back].${ext}"
echo "$backfile"
cccf[back].png
Попробуйте ту команду этот путь:
for f in ./*
do
v="$(basename "$f")"
cp Back.png "${v%%.*}"\[back\].png
done
Информация о сценарии:
v="$(basename "$f")"
получить thte имена имени файлаcp Back.png "${v%%.*}"\[back\].png
кому: copy
и создайте новый файл с желаемым именем файла.${v%%.*}
получения просто часть имени файла Вам нужно без расширения!