Tente:
find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
-
find .
Isso inicia uma pesquisa de arquivos com o diretório atual.
-
-type f
Isso limita a pesquisa a arquivos regulares.
-
-name '*.png'
Isso limita a pesquisa a arquivos cujos nomes terminam com
.png
. -
-execdir bash -c '...' Move {} \;
Isso executa o comando entre aspas simples com
$0
atribuído aMove
e$1
atribuído ao nome do arquivo que foi encontrado. No nosso caso, o comando entre aspas simples é: -
mv "$1" "${1%.png}@2x.png"
Isso renomeia o arquivo para terminar com
@2x.png
. A construção${1%.png}
remove o.png
do final do nome do arquivo. Assim,${1%.png}@2x.png
substitui o.png
no final do nome do arquivo por@2x.png
.
Exemplo
Vamos começar com diretórios com estes arquivos:
$ find .
.
./dirA
./dirA/fileA.png
./dirA/fileC.png
./dirA/fileB.png
./dirB
./dirB/fileE.png
./dirB/dirC
./dirB/dirC/fileF.png
./dirB/fileD.png
Agora, vamos executar nosso comando:
$ find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
Após o comando ser executado, agora temos estes arquivos:
$ find .
.
./dirA
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB
./dirB/dirC
./dirB/dirC/[email protected]
./dirB/[email protected]
./dirB/[email protected]