Пытаться:
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