web-dev-qa-db-fra.com

Renommez tous les fichiers ".pdf" en "_0.pdf".

Je veux copier tous les fichiers *.pdf dans *_0.pdf

Comment puis-je le faire?

11
Jonas

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
16
sempaiscuba

Avec rename (prename):

rename -n 's/\.pdf$/_0$&/' *.pdf
  • \.pdf$ correspond à .pdf à la fin du nom de fichier
  • dans le remplacement, la correspondance est ajoutée au début par _0: _0$&
  • déposer -n pour l'action réelle

Avec 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
10
heemayl

Voulez-vous renommer ou copier?

Pour renommer, vous pouvez utiliser emacs:

  1. Ouvrez le répertoire parent en tant que tampon dired
  2. Tapez M-x wdired-change-to-wdired-mode
  3. Utilisez M-x query-replace pour remplacer '.pdf' par '_0.pdf'
  4. Tapez C-x C-s pour enregistrer le tampon
3
asrhaerhawer

Voulez-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 .

2
dessert