Como renomear vários nomes de arquivo e incluir subpastas?

Como renomear vários nomes de arquivo e incluir subpastas?

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, $0atribuído Movee $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 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]

informação relacionada