Renommer tous les fichiers d'un dossier avec le préfixe "Unix_"
Supposons qu'un dossier contienne deux fichiers
a.txt
b.pdf
alors ils devraient tous deux être renommés d'une commande unique en
Unix_a.txt
Unix_b.pdf
Renommer tous les fichiers d'un dossier avec le préfixe "Unix_"
Supposons qu'un dossier contienne deux fichiers
a.txt
b.pdf
alors ils devraient tous deux être renommés d'une commande unique en
Unix_a.txt
Unix_b.pdf
Si vos noms de fichiers contiennent pas d'espace blanc et que vous n'avez pas de sous-répertoires, vous pouvez utiliser un simple for
boucle :
$ for FILENAME in *; do mv $FILENAME Unix_$FILENAME; done
Sinon, utilisez la fonction pratique rename
(qui est un script perl) - bien qu'elle ne soit pas toujours disponible sur tous les Unix (par exemple, OS X n'est pas livré avec la commande rename
).
Un bref aperçu sur debian-administration.org :
Si vos noms de fichiers contiennent des espaces, il est plus facile d'utiliser la fonction find
sous Linux, ce qui suit devrait 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 doit pouvoir être installé (par exemple sur Mac OS X avec brew install findutils
).
$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
@Matteo : Merci pour l'indication : j'ai mis à jour ma réponse avec un avertissement et deux exemples avec find
.
Je recommande également for f in *; do [[ -f ${f} ]] && mv ...; done
pour attraper uniquement les fichiers (pas de sous-répertoires, de liens, etc.)...
Si vous citez les variables comme vous le devriez, alors for FILENAME in *; do mv "$FILENAME" "Unix_$FILENAME"; done
fonctionne correctement, quels que soient les caractères présents dans les noms de fichiers. Il déplace également les répertoires, les sockets, les liens symboliques et d'autres types de fichiers ; je suppose que cela n'a pas d'importance.
Essayez le rename
commande dans le dossier contenant les fichiers :
rename 's/^/Unix_/' *
L'argument de rename ( commande sed s ) indique qu'il faut remplacer la regex ^ avec Unix_ . Le caret (^) est un caractère spécial qui signifie début de la ligne .
@Matteo 's/^/.../'
est l'argument de l'expression perl pour la fonction commande de renommage
C'est génial ! Je suggère d'ajouter le dossier/*, car * est un peu dangereux si la commande est accidentellement répétée à un autre endroit.
Je pense que c'est exactement ce que vous cherchez :
ls | xargs -I {} mv {} Unix_{}
Oui, c'est un logiciel simple, mais élégant et puissant, et qui se lit d'une traite. Vous pouvez obtenir une introduction plus détaillée de ma part sur la page : Renommer des fichiers et des répertoires (ajouter un préfixe)
J'ai récemment été confronté à cette même situation et j'ai trouvé une solution intégrée plus facile. Je la partage ici afin qu'elle puisse aider d'autres personnes à la recherche d'une solution.
Avec OS X Yosemite, Apple a intégré les capacités de renommage par lots directement dans le Finder. Des informations détaillées sont disponibles ici . J'ai également copié les étapes ci-dessous,
Renommer plusieurs éléments
Sélectionnez les éléments, puis Control-cliquez sur l'un d'entre eux.
Dans le menu contextuel, sélectionnez Renommer les éléments.
Dans le menu contextuel situé sous Renommer les éléments du dossier, choisissez de remplacer le texte des noms, d'ajouter du texte aux noms ou de modifier le format des noms.
Remplacer le texte : Saisissez le texte que vous souhaitez supprimer dans le champ "Rechercher", puis saisissez le texte que vous souhaitez ajouter dans le champ "Remplacer par".
Ajouter du texte : Saisissez 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 placer 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 par lequel vous souhaitez commencer.
Cliquez sur Renommer.
Si vous avez un modèle commun dans vos fichiers, vous pouvez utiliser l'option Remplacer le texte, sinon l'option Ajouter le texte fera é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 de la -i
option{}
est le placeholder pour tous les fichiers, nécessaire si xargs
reçoit plus de deux arguments en entréeUtilisation de l'awk :
ls -lrt | grep '^-' | awk '{print "mv "$9" unix_"$9""}' | sh
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Vérifiez ce lien => cyberciti.biz/tips/
0 votes
Vérifiez ici : theunixshell.blogspot.com/2013/01/