Копирование одного файла многим на основе других имен файлов и типов

У меня есть набор файлов, названных в честь набора букв (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.

Упростить, как я копирую файл так, чтобы имя вставило что-то в середину другого имени, уже оставив все файлы там нетронутыми?

0
задан 9 July 2018 в 14:32

2 ответа

Используйте расширение параметра оболочки на

  1. удалите все до (в последний раз, если само имя файла содержит их), период, и сохраните результат как расширение

    ext="${file##*.}"
    
  2. удалите расширение, затем добавьте назад новый суффикс + расширение

    backfile="${file%.*}[back].${ext}"
    

Напр.

file=cccf.png
ext="${file##*.}"
backfile="${file%.*}[back].${ext}"
echo "$backfile"
cccf[back].png
3
ответ дан 28 October 2019 в 23:20

Попробуйте ту команду этот путь:

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%%.*} получения просто часть имени файла Вам нужно без расширения!
0
ответ дан 28 October 2019 в 23:20

Другие вопросы по тегам:

Похожие вопросы: