Как переименовать несколько имен файлов, включая подпапки?

237
srjohnhuang

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

./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
John1024

Пытаться:

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

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

  • -type f

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

  • -name '*.png'

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

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

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

  • mv "$1" "$@2x.png"

    Это переименовывает файл в конец @2x.png. Конструкция $удаляет .pngиз конца имени файла. Таким образом, $@2x.pngзаменяет .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" "$@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 

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