Por exemplo eu tenho os seguintes arquivos:
./dirA/fileA.png
./dirA/fileB.png
./dirA/fileC.png
./dirB/fileD.png
./dirB/fileE.png
./dirB/dirC/fileF.png
Existe algum comando ou script de linha para renomear o nome do arquivo para o seguinte?
./dirA/[email protected]
./dirA/[email protected]
./dirA/[email protected]
./dirB/[email protected]
./dirB/[email protected]
./dirB/dirC/[email protected]
Responder1
Tentar:
find . -type f -name '*.png' -execdir bash -c 'mv "$1" "${1%.png}@2x.png"' Move {} \;
find .
Isso inicia uma pesquisa de arquivos no diretório atual.
-type f
Isso limita a pesquisa a arquivos normais.
-name '*.png'
Isso limita a pesquisa a arquivos cujos nomes terminam com
.png
.-execdir bash -c '...' Move {} \;
Isso executa o comando entre aspas simples,
$0
atribuídoMove
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 a execução do comando, 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]