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 fIsso 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
$0atribuído aMovee$1atribuí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.pngdo final do nome do arquivo. Assim,${1%.png}@2x.pngsubstitui o.pngno 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]