Uma maneira simples seria usar o comando mmv :
mmv '*.pdf' '#1_0.pdf'
Você pode precisar instalá-lo primeiro (disponível no repositório Universe):
sudo apt-get install mmv
Eu quero copiar todos os arquivos *.pdf
para *_0.pdf
Como posso fazer isso?
Uma maneira simples seria usar o comando mmv :
mmv '*.pdf' '#1_0.pdf'
Você pode precisar instalá-lo primeiro (disponível no repositório Universe):
sudo apt-get install mmv
com rename
( prename
):
rename -n 's/\.pdf$/_0$&/' *.pdf
\.pdf$
corresponde .pdf
ao final do nome do arquivo _0
: _0$&
-n
para ação real Com a expansão do parâmetro bash
:
for f in *.pdf; do pre="${f%.pdf}"; echo mv -- "$f" "${pre}_0.pdf"; done
pre="${f%.pdf}"
salva a parte do nome do arquivo antes de .pdf
como variável pre
enquanto mv
-ing _0.pdf
é anexado a $pre
: ${pre}_0.pdf
solte echo
para ação real
Exemplo:
% rename -n 's/\.pdf$/_0$&/' *.pdf
rename(egg.pdf, egg_0.pdf)
rename(spam.pdf, spam_0.pdf)
% for f in *.pdf; do pre="${f%.pdf}"; echo mv -- "$f" "${pre}_0.pdf"; done
mv -- egg.pdf egg_0.pdf
mv -- spam.pdf spam_0.pdf
Você deseja renomear ou copiar?
Para renomear, você pode usar o emacs:
M-x wdired-change-to-wdired-mode
M-x query-replace
para substituir '.pdf' por '_0.pdf' C-x C-s
para salvar o buffer Você deseja renomear ou copiar os arquivos?
Para ambos, você pode simplesmente usar um loop for e mv
(mover, também renomear) ou cp
(copiar):
for i in *.pdf; do mv "$i" "${i/%.pdf/_0.pdf}"; done
ou melhor
for i in *.pdf; do cp "$i" "${i/%.pdf/_0.pdf}"; done
As aspas são necessárias apenas se (um dos) arquivos contiverem espaços.
Explicação rápida: ${i/%.pdf/_0.pdf}
pega a variável i
e substitui “.pdf” por “_0.pdf” se ela for encontrada no final da string (daí %
). Leia mais sobre as incríveis superpotências de bash aqui .
No shell rename
irá ajudá-lo:
rename .pdf _0.pdf *.pdf
Execute o comando no diretório com os arquivos pdf.
Se você tiver os arquivos dentro dos diretórios e quiser encontrar todos eles e substituir:
find . -iname "*.pdf" | fgrep -v _0.pdf | xargs -n1 echo rename .pdf _0.pdf
Tags command-line rename copy