208 votes

Renommer des fichiers et des répertoires (ajouter un préfixe)

Je voudrais ajouter un préfixe sur tous les dossiers et répertoires.

Exemple :

J'ai

Hi.jpg
1.txt
folder/
this.file_is.here.png
another_folder.ok/

Je voudrais ajouter le préfixe "PRE_".

PRE_Hi.jpg
PRE_1.txt
PRE_folder/
PRE_this.file_is.here.png
PRE_another_folder.ok/

Regards,

0 votes

Utilisez AWK comme sur ce réponse : awk '$0="prefix"$0' fichier > nouveau_fichier

326voto

CanSpice Points 14749

Merci à Peter van der Heijden Voici une méthode qui fonctionne pour les noms de fichiers contenant des espaces :

for f in * ; do mv -- "$f" "PRE_$f" ; done

("--" est nécessaire pour réussir avec les fichiers qui commencent par des tirets, dont les noms seraient autrement interprétés comme des commutateurs pour la commande mv)

0 votes

Heh, c'est vrai, cela ne fonctionnera pas du tout si vous avez un fichier contenant un espace.

14 votes

Si vous modifiez le ls pour * et mettez des guillemets autour des arguments de mv il fonctionnera pour les fichiers contenant des espaces.

0 votes

@CanSpice Est-il possible d'inverser cette opération (supprimer le préfixe) avec un script similaire ?

113voto

tchrist Points 47116

Utilisez le site renommer script de cette façon :

$ rename 's/^/PRE_/' *

Il n'y a aucun problème avec les métacaractères ou les espaces dans les noms de fichiers.

5 votes

Certains systèmes disposent d'un utilitaire util-linux appelé "rename" qui fonctionne différemment (sur Ubuntu, il s'appelle "rename.ul").

0 votes

rename m'a toujours aidé à gérer très facilement les renommages de fichiers multiples.

0 votes

Problème avec le symbole @ dans le préfixe. J'ai dû le changer mais c'était facile. Cela a bien fonctionné.

84voto

Zheng Qsin Points 240

Pour ajouter un préfixe ou un suffixe pour les fichiers (répertoires), vous pouvez utiliser la méthode simple et puissante en xargs :

ls | xargs -I {} mv {} PRE_{}

ls | xargs -I {} mv {} {}_SUF

Il utilise l'option de remplacement des paramètres de xargs : -I. Et vous pouvez obtenir plus de détails dans la page de manuel.

3 votes

P.S. : Si vous voulez juste renommer les fichiers de pièces (répertoires) du répertoire courant, il suffit de le filtrer avant xargs, comme : ls *.old | xargs -I {} mv {} PRE_{}

0 votes

Il est intéressant de noter que l'utilisation de rename n'a pas fonctionné. L'utilisation de xargs a bien fonctionné pour mon installation RHEL, donc +1 pour cette option, qui facilite la compréhension de la commande.

0 votes

Ne fonctionne pas si le nom de fichier contient des guillemets simples, échoue avec : xargs : unmatched single quote ; par défaut les guillemets sont spéciaux pour xargs à moins que vous n'utilisiez l'option -0

8voto

tadmc Points 3326

avec Perl :

perl -e 'rename $_, "PRE_$_" for <*>'

7voto

kurumi Points 10096

Si vous avez Ruby(1.9+)

ruby -e 'Dir["*"].each{|x| File.rename(x,"PRE_"+x) }'

Prograide.com

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.

Powered by:

X