Je veux copier tous les fichiers *.pdf
dans *_0.pdf
Comment puis-je le faire?
Un moyen simple consisterait à utiliser la commande mmv :
mmv '*.pdf' '#1_0.pdf'
Vous devrez peut-être d'abord l'installer (disponible dans le référentiel Universe):
Sudo apt-get install mmv
Avec rename
(prename
):
rename -n 's/\.pdf$/_0$&/' *.pdf
\.pdf$
correspond à .pdf
à la fin du nom de fichier_0
: _0$&
-n
pour l'action réelleAvec l'expansion du paramètre bash
:
for f in *.pdf; do pre="${f%.pdf}"; echo mv -- "$f" "${pre}_0.pdf"; done
pre="${f%.pdf}"
enregistre la partie du nom de fichier précédant .pdf
en tant que variable pre
alors que mv
- IN _0.pdf
est ajouté à $pre
: ${pre}_0.pdf
laisser tomber echo
pour l'action réelle
Exemple:
% 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
Voulez-vous renommer ou copier?
Pour renommer, vous pouvez utiliser emacs:
M-x wdired-change-to-wdired-mode
M-x query-replace
pour remplacer '.pdf' par '_0.pdf'C-x C-s
pour enregistrer le tamponVoulez-vous renommer ou copier les fichiers? Pour les deux, vous pouvez simplement utiliser une boucle for et mv
(déplacer, renommer également) ou cp
(copier):
for i in *.pdf; do mv "$i" "${i/%.pdf/_0.pdf}"; done
ou plutôt
for i in *.pdf; do cp "$i" "${i/%.pdf/_0.pdf}"; done
Les guillemets ne sont nécessaires que si (l'un de vos fichiers) contient des espaces.
Explication rapide: ${i/%.pdf/_0.pdf}
prend la variable i
et remplace “.pdf” par “_0.pdf” si elle se trouve à la fin de la chaîne (d'où %
). En savoir plus sur les superpuissances incroyables de bash ici .