Renommer tous les fichiers d'un dossier avec un préfixe dans une seule commande unix

renommer tous les fichiers d'un dossier avec le préfixe" Unix_ " c'est-à-dire supposer qu'un dossier a deux fichiers a.txt et B. pdf, alors ils devraient tous les deux être renommés d'une commande unique à Unix_a.txt et Unix_b.pdf

60
demandé sur zx8754 2011-06-13 14:57:42

8 réponses

si vos noms de fichiers contiennent no whitepace et que vous n'avez pas de sous-répertoires, 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'il puisse ne pas être disponible hors de la boîte sur chaque Unix (par exemple OS X ne vient pas avec rename ).

un bref aperçu à debian-administration.org:

si vos noms de fichiers contiennent des espaces, il est plus facile d'utiliser find , sur 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 d'option -printf , malheureusement. Mais GNU findutils doit être installable (sur Mac OS X avec brew install findutils ).

$ gfind . -type f -name '*' -printf "mv \"%h/%f\" \"%h/Unix_%f\"\n" | sh
77
répondu miku 2013-09-04 19:58:00

essayez la rename commande dans le dossier avec les fichiers :

rename 's/^/Unix_/' *

l'argument de rename ( sed s command ) indique de remplacer le regex ^ par Unix_ . L'accent circonflexe (^) est un caractère spécial qui signifie début de ligne .

57
répondu pavium 2017-12-31 14:28:16

je pense que c'est exactement ce que vous cherchez:

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

Oui, il est simple, élégant et puissant, et alos oneline-comand de courese. Vous pouvez obtenir plus de détails intro de moi sur la page: renommer les fichiers et les répertoires (ajouter le préfixe)

23
répondu Zheng Qsin 2017-05-23 11:47:25

j'ai récemment fait face à la même situation et j'ai trouvé une solution plus facile. Je le partage ici afin qu'il puisse aider d'autres personnes à la recherche de solution.

avec OS X Yosemite, Apple a intégré les capacités de renommage par lots directement dans Finder. Détails informations sont disponibles ici . J'ai aussi copié les étapes ci-dessous,

Renommer plusieurs éléments

  1. sélectionnez les éléments, puis Contrôle-cliquez sur l'un d'eux.

  2. dans le menu raccourci, sélectionnez Renommer Items.

  3. dans le menu contextuel ci-dessous, renommez les éléments du dossier, choisissez de remplacer le texte dans les noms, ajoutez du texte aux noms, ou changez le format du nom.

    • texte que vous voulez ajouter dans le champ "Remplacer par".

    • Ajouter du texte: Saisissez le texte que vous souhaitez ajouter dans le champ, puis choisissez d'ajouter du texte avant ou après le nom actuel.

    • Format: choisissez un format de nom pour les fichiers, puis choisissez de mettre l'index, compteur, ou date avant ou après le nom. Entrez un nom dans le champ de format personnalisé, puis entrez le numéro avec lequel vous voulez commencer.

  4. Cliquez Sur Renommer.

si vous avez un motif commun dans vos fichiers que vous pouvez utiliser remplacer le texte sinon ajouter du texte ferait également le travail.

7
répondu Tejas C 2016-01-19 18:06:50

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épertoire
  • xargs - 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ée

Utilisation de awk:

ls -lrt | grep '^-' | awk '{print "mv "" unix_"""}' | sh
4
répondu NirajW 2016-05-17 21:26:02

fonctionne aussi pour les articles avec des espaces et ignore les répertoires

for f in *; do [[ -f "$f" ]] && mv "$f" "unix_$f"; done
0
répondu user645527 2015-05-29 10:31:48

avec rnm (vous devrez l'installer):

rnm -ns 'Unix_/fn/' *

ou

rnm -rs '/^/Unix_/' *

P. S : je suis l'auteur de cet outil.

0
répondu Jahid 2016-05-07 17:06:21

:

Nous avons certificate.key certificate.crt à l'intérieur /user/ssl/

nous voulons renommer tout ce qui commence par certificate en certificate_OLD

nous sommes maintenant situés à l'intérieur de /user

D'abord, vous faites un dry run avec -n :

rename -n "s/certificate/certificate_old/" ./ssl/*

Qui renvoie:

rename(./ssl/certificate.crt, ./ssl/certificate_OLD.crt) rename(./ssl/certificate.key, ./ssl/certificate_OLD.key)

vos fichiers seront inchangés il s'agit juste d'un essai.

Solution:

quand vous êtes satisfait du résultat du test, exécutez-le pour de vrai:

rename "s/certificate/certificate_OLD/" ./ssl/*

ce que cela signifie:

'renommer" s / SOMETHING / SOMETING_ELSE " PATH / FILES

Astuce:

si vous êtes déjà sur le chemin, exécutez-le comme ceci:

rename "s/certificate/certificate_OLD/" *

Ou si vous voulez le faire dans n'importe quel sous-répertoire avec ss :

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.

Jouer avec la regex et tester en AVANT avec -n .

ATTENTION CELA VA MÊME RENOMMER LES NOMS DE DOSSIERS QUI CORRESPONDENT. Mieux cd dans le répertoire et le faire là. UTILISEZ À VOTRE PROPRE RISQUE.

0
répondu Khalil Gharbaoui 2018-06-03 17:45:34