Adicionando um sufixo a muitos arquivos enquanto preserva as extensões

1

Eu tenho um diretório ~/mydir/ com muitos arquivos. Alguns desses arquivos são

~/mydir/foo.py
~/mydir/foo.tex
~/mydir/foo.pdf
~/mydir/foo.log

Gostaria de alterar qualquer arquivo em ~/mydir/ cujo nome base seja foo to foo-bar . Então, os arquivos acima devem ser renomeados como

~/mydir/foo-bar.py
~/mydir/foo-bar.tex
~/mydir/foo-bar.pdf
~/mydir/foo-bar.log

Não estou preocupado com os novos nomes de arquivos em conflito com os arquivos existentes ( $ ls ~/mydir/foo-bar* não retorna nada).

Parece que isso deve ser fácil de fazer no bash, mas não consigo entender.

Existe um script simples para realizar essa tarefa?

    
por Brian Fitzpatrick 05.09.2017 / 19:28

2 respostas

2

Se sua distribuição usa (ou oferece) a versão perl de renomeação (o Debian e a maioria dos derivados):

cd mydir
rename 's/\.([^.]+)$/-bar.$1/

Eu sei algumas distribuições (não me lembro qual foi) oferece como prename .

    
por 05.09.2017 / 19:38
2

Isso pode ser feito com mv :

for name in ./foo*; do mv "$name" "${name/foo/foo-bar}"; done

Por exemplo:

[devuser@machine test]$ touch foo.log foo.pdf foo.tex foo.py
[devuser@machine test]$ ls
foo.log  foo.pdf  foo.py  foo.tex
[devuser@machine test]$ for name in ./foo*; do mv "$name" "${name/foo/foo-bar}"; done
[devuser@machine test]$ ls
foo-bar.log  foo-bar.pdf  foo-bar.py  foo-bar.tex
    
por 05.09.2017 / 20:35

Tags