Em bash
:
while read ; do mv "$REPLY" "${REPLY%.js}-orig.js" ; done < files-to-rename.txt
Eu tenho um projeto chamado my-project
com a seguinte árvore de arquivos.
.
├── 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.
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?
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.
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.
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
Tags bash rename shell shell-script