Renommez tous les fichiers d’un dossier portant le préfixe "Unix_", c’est-à-dire qu’un dossier contient deux fichiers, a.txt et b.pdf, qui doivent tous deux être renommés à partir d’une seule commande en Unix_a.txt et Unix_b.pdf.
Si vos noms de fichiers ne contiennent aucun espace et que vous ne disposez d'aucun sous-répertoire, vous pouvez utiliser une simple boucle for
:
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
Sinon, utilisez la commande pratique rename
(qui est un script Perl) - bien qu’elle ne soit peut-être pas disponible immédiatement avec chaque Unix (par exemple, OS X n’est pas fourni avec rename
).
Un bref aperçu sur debian-administration.org:
Si vos noms de fichiers contiennent des espaces, il est plus facile d'utiliser find
. Sous Linux, les opérations suivantes devraient fonctionner:
$ find . -type f -name '*' -printf "echo mv '%h/%f' '%h/Unix_%f\n'" | sh
Sur les systèmes BSD, il n'y a pas de -printf
option, malheureusement. Mais GNU findutils devrait pouvoir être installé (par exemple, Mac OS X avec brew install findutils
).
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
Essayez la commande rename
dans le dossier contenant les fichiers :
rename 's/^/Unix_/' *
L'argument de renommer ( commande sed s ) indique de remplacer l'expression régulière ^ par Unix _ . Le caret (^) est un caractère spécial qui signifie le début de la ligne .
Je pense que c'est exactement ce que vous cherchez:
ls | xargs -I {} mv {} Unix_{}
Oui, il est simple, élégant et puissant, et il est facile à utiliser. Vous pouvez obtenir une introduction plus détaillée de moi sur la page: Renommer des fichiers et des répertoires (Ajouter un préfixe)
J'ai récemment fait face à cette même situation et j'ai trouvé une solution intégrée plus facile. Je le partage ici pour que cela puisse aider d'autres personnes à la recherche d'une solution.
Avec OS X Yosemite, Apple a intégré les fonctions de changement de nom de lot directement dans le Finder. Des informations détaillées sont disponibles ici . J'ai également copié les étapes ci-dessous,
Renommez plusieurs éléments
Sélectionnez les éléments, puis cliquez sur l'un d'entre eux en maintenant la touche Contrôle enfoncée.
Dans le menu contextuel, sélectionnez Renommer les éléments.
Dans le menu contextuel situé sous Renommer les éléments de dossier, choisissez de remplacer le texte par les noms, d’ajouter du texte aux noms ou de modifier le format du nom.
Remplacer le texte: saisissez le texte que vous souhaitez supprimer dans le champ Rechercher, puis le texte que vous souhaitez ajouter dans le champ "Remplacer par".
Ajouter du texte: entrez le texte que vous souhaitez ajouter dans le champ, puis choisissez d'ajouter le texte avant ou après le nom actuel.
Format: Choisissez un format de nom pour les fichiers, puis choisissez de mettre l'index, le compteur ou la date avant ou après le nom. Entrez un nom dans le champ Format personnalisé, puis entrez le numéro avec lequel vous souhaitez commencer.
Cliquez sur Renommer.
Si vous avez un motif commun dans vos fichiers, vous pouvez utiliser Remplacer le texte, sinon Ajouter le texte ferait également l'affaire.
Vous pouvez simplement utiliser -i
au lieu de -I {}
ls | xargs -i mv {} unix_{}
Cela fonctionne aussi parfaitement.
ls
- liste tous les fichiers du répertoirexargs
- accepte tous les fichiers ligne par ligne en raison du -i
option{}
est l'espace réservé pour tous les fichiers, nécessaire si xargs
obtient plus de deux arguments en entréeUtilisation de awk:
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
Fonctionne également pour les éléments avec des espaces et ignore les répertoires
for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
Avec rnm (vous devrez l’installer):
rnm -ns 'Unix_/fn/' *
Ou
rnm -rs '/^/Unix_/' *
P.S: Je suis l'auteur de cet outil.
Situation:
Nous avons certificate.key
certificate.crt
À l'intérieur de /user/ssl/
Nous voulons renommer tout ce qui commence par certificate
en certificate_OLD
Nous sommes maintenant situés à l'intérieur de /user
Tout d'abord, vous faites un essai avec -n
:
rename -n "s/certificate/certificate_old/" ./ssl/*
Qui retourne:
rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)
Vos fichiers resteront inchangés, ceci est juste un test.
Solution:
Lorsque vous êtes satisfait du résultat du test, exécutez-le pour de vrai:
rename "s/certificate/certificate_OLD/" ./ssl/*
Ce que cela veut dire:
`renommer" s/SOMETHING/SOMETING_ELSE "CHEMIN/FICHIERS
Astuce:
Si vous êtes déjà sur le chemin, lancez-le comme ceci:
rename "s/certificate/certificate_OLD/" *
Ou si vous voulez le faire dans n'importe quel sous-répertoire commençant par ss
do:
rename -n "s/certificat/certificate_old/" ./ss*/*
Vous pouvez aussi faire:
rename -n "s/certi*/certificate_old/" ./ss*/*
Qui renomme tout ce qui commence par certi
dans n'importe quel sous-répertoire commençant par ss
.
Le ciel est la limite.
Jouez avec regex et testez TOUJOURS ceci AVANT avec -n
.
ATTENTION, CECI MÊME RENOMMERA DES NOMS DE DOSSIERS QUI CORRESPONDENT Mieux cd
dans le répertoire et faites-le là. USE AT RISQUE PROPRE.