1

Например, у меня есть следующие файлы:

./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png

Есть ли одна строка команды или сценария, чтобы переименовать имя файла, чтобы быть следующим?

./dirA/fileA@2x.png
./dirA/fileB@2x.png
./dirA/fileC@2x.png
./dirB/fileD@2x.png
./dirB/fileE@2x.png
./dirB/dirC/fileF@2x.png

1 ответ1

0

Пытаться:

find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
  • find .

    Начнется поиск файла с текущим каталогом.

  • -type f

    Это ограничивает поиск обычными файлами.

  • -name '*.png'

    Это ограничивает поиск файлами, имена которых заканчиваются на .png .

  • -execdir bash -c '...' Move {} \;

    При этом команда запускается в одинарных кавычках:$0 назначается для Move и $1 для имени найденного файла. В нашем случае команда в одинарных кавычках:

  • mv "$1" "${1%.png}@2x.png"

    Это переименовывает файл в конец @2x.png . Конструкция ${1%.png} удаляет .png из конца имени файла. Таким образом, ${1%.png}@2x.png .png‹ .png заменяет @2x.png в конце имени файла на @ 2x.png .

пример

Давайте начнем с каталогов с этими файлами:

$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png

Теперь давайте запустим нашу команду:

$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;

После выполнения команды у нас есть следующие файлы:

$ find .
.
./dirA
./dirA/fileC@2x.png
./dirA/fileA@2x.png
./dirA/fileB@2x.png
./dirB
./dirB/dirC
./dirB/dirC/fileF@2x.png
./dirB/fileD@2x.png
./dirB/fileE@2x.png

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .