Como renomear arquivos extraídos de uma lista de arquivos usando um único comando ou linha

1

Eu tenho um projeto chamado my-project com a seguinte árvore de arquivos.

meu projeto / (antes)
.
├── src
│   ├── index.html
│   ├── main.js
│   ├── normalize.js
│   ├── routes
│   │   ├── index.js
│   │   └── Home
│   │       ├── index.js
│   │       └── assets
│   ├── static
│   ├── store
│   │   ├── createStore.js
│   │   └── reducers.js
│   └── styles
└── project.config.js

Agora, quero renomear os seguintes arquivos para adicionar a string -orig imediatamente antes da extensão do tipo de arquivo.

arquivos para renomear.txt
src/main.js
src/routes/index.js
src/store/reducers.js
project.config.js

(Eu não quero alterar nenhum conteúdo do arquivo.)

Assim, a árvore de arquivos final é semelhante à seguinte.

meu projeto / (depois)
.
├── src
│   ├── index.html
│   ├── main-orig.js
│   ├── normalize.js
│   ├── routes
│   │   ├── index-orig.js
│   │   └── Home
│   │       ├── index.js
│   │       └── assets
│   ├── static
│   ├── store
│   │   ├── createStore.js
│   │   └── reducers-orig.js
│   └── styles
└── project.config-orig.js

Existe uma maneira de conseguir isso com uma única linha ou comando?

    
por Mowzer 12.11.2018 / 22:23

4 respostas

4

Em bash :

while read ; do mv "$REPLY" "${REPLY%.js}-orig.js" ; done < files-to-rename.txt
    
por 12.11.2018 / 22:36
3

Uma abordagem seria pedir ao shell para ler cada linha do arquivo, em seguida, usar a expansão de parâmetros do shell para extrair o nome do arquivo base e a extensão:

while IFS= read -r filename
do
  base=${filename%.*}
  extension=${filename##*.}
  echo mv -- "my-project/$filename" "my-project/${base}-orig.${extension}"
done < files-to-rename.txt

Remova o echo se a saída parece correta.

    
por 13.11.2018 / 03:04
1
for i in 'cat files-to-rename.txt'; do postfix=${i/#*\./}; mv $i ${i/%.$postfix/-orig.$postfix}; done;

isso funciona com postfix arbitrário, não apenas js. no entanto, por favor, use try git ou svn para seu próprio bem. até mesmo um comando tar funcionará melhor que isso.

    
por 12.11.2018 / 22:41
1

Usando o comando rename . Primeiro faça um teste detalhado que não mude nada:

rename -n -v 's/.js$/-orig.js/' $(find my-project/)

Se isso parecer correto, remova o -n para realmente renomear os arquivos:

rename    -v 's/.js$/-orig.js/' $(find my-project/)

Nota: para instalar o rename na caixa Debian ou Ubuntu , faça:

apt install rename
    
por 13.11.2018 / 13:32