297 votes

Renommer plusieurs fichiers sous Unix

Il y a plusieurs fichiers dans un répertoire qui commencent par le préfixe fgh, par exemple :

fghfilea
fghfileb
fghfilec

Je veux les renommer tous pour qu'ils commencent par le préfixe jkl. Existe-t-il une commande unique pour faire cela au lieu de renommer chaque fichier individuellement ?

335voto

Stephan202 Points 27707

Il y a plusieurs façons, mais en utilisant rename sera probablement le plus facile.

En utilisant une version de rename :

rename 's/^fgh/jkl/' fgh*

En utilisant une autre version de rename (même chose que La réponse de Judy2K ) :

rename fgh jkl fgh*

Vous devriez consulter la page de manuel de votre plateforme pour voir ce qui s'applique.

130voto

nik Points 8025

C'est ainsi que sed et mv peuvent être utilisés ensemble pour faire ce que Stephan202 pense ?

for f in fgh*; do mv $f $(echo $f | sed 's/^fgh/jkl/g'); done

90voto

ghostdog74 Points 86060

Rename n'est pas forcément présent sur tous les systèmes, donc si vous ne l'avez pas, utilisez le shell cet exemple dans le shell bash

for f in fgh*; do mv "$f" "${f/fgh/xxx}";done

41voto

Lee Netherton Points 4712

Utilisation de mmv :

mmv "fgh*" "jkl#1"

21voto

iwein Points 4957

Il existe de nombreuses façons de le faire (toutes ne fonctionnent pas sur tous les systèmes Unixy) :

  • ls | cut -c4- | xargs -I§ mv fgh§ jkl§

    Le § peut être remplacé par tout ce qui vous convient. Vous pouvez le faire avec find -exec aussi, mais il se comporte de manière subtilement différente sur de nombreux systèmes, donc j'évite généralement cette solution.

  • for f in fgh*; do mv "$f" "${f/fgh/jkl}";done

    Grossier mais efficace, comme on dit

  • rename 's/^fgh/jkl/' fgh*

    Très joli, mais rename n'est pas présent sur BSD, qui est le système unix le plus courant afaik.

  • rename fgh jkl fgh*

  • ls | perl -ne 'chomp; next unless -e; $o = $_; s/fgh/jkl/; next if -e; rename $o, $_';

    Si vous tenez à utiliser Perl, mais qu'il n'y a pas de renommer sur votre système, vous pouvez utiliser ce monstre.

Certains d'entre eux sont un peu alambiqués et la liste est loin d'être complète, mais vous trouverez ici ce que vous cherchez pour pratiquement tous les systèmes unix.

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