web-dev-qa-db-fra.com

Comment renommer facilement plusieurs fichiers à l'aide de la ligne de commande?

L’un des moyens de renommer rapidement des fichiers sous Windows est

F2 > Rename > Tab (to next file) > Rename ...

Mais dans Ubuntu/Nautilus, je ne peux pas passer au fichier suivant. Mais étant sous Linux, je pense qu’il doit exister une alternative en ligne de commande.

Cependant, je souhaite parfois plus de contrôle sur la manière de renommer des fichiers spécifiques. Dans ce cas, il est peut-être préférable de pouvoir passer au fichier suivant.

103
Jiew Meng

J'utilise renametout le temps. C'est assez simple, mais j'espère que vous connaissez la regex de base:

rename "s/SEARCH/REPLACE/g"  *

Ceci remplacera la chaîne SEARCHpar REPLACEdans chaque fichier (c'est-à-dire, *). /g signifie global, donc si vous aviez un SEARCH_SEARCH.jpg, il serait renommé REPLACE_REPLACE.jpg. Si vous n'aviez pas /g, il n'aurait procédé qu'à une seule substitution et s'appellerait donc maintenant REPLACE_SEARCH.jpg. Si vous souhaitez tenir compte de la casse, ajoutez /i (ce serait donc /gi ou /ig à la fin).

Avec les expressions régulières, vous pouvez faire beaucoup plus.

Notez que renameest la commande prenameNAME _ (aussi appelée Perl renamename__), qui prend en charge les expressions régulières Perl complètes. Il existe un autre renamequi utilise des modèles et n’est pas aussi puissant. prenameétait installé par défaut sur Ubuntu (avec Perl), mais maintenant vous devrez peut-être faire:

Sudo apt install rename

Voici quelques exemples:

Préfixe

Ajouter :

rename 's/^/MyPrefix_/' * 
  • document.pdf renommé en MyPrefix_document.pdf

Supprimer :

Aussi, vous pouvez supprimer les chaînes indésirables. Supposons que vous ayez 20 fichiers MP3 nommés comme CD RIP 01 Song.mp3 et que vous souhaitiez supprimer la partie "CD RIP", et que vous souhaitiez les supprimer avec une seule commande.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 à 01 Song.mp3

Notez l’espace supplémentaire dans '^CD RIP '; sans cet espace, tous les fichiers auraient un espace comme premier caractère du fichier. Notez également que cela fonctionnera sans le caractère ^, mais correspondrait à CD RIP  dans n’importe quelle partie du nom de fichier. Le ^ garantit qu'il ne supprime les caractères que s'ils sont au début du fichier.

Suffixe

Ajouter :

rename 's/$/_MySuffix/' *
  • document.pdf renommé en document.pdf_MySuffix

Changer :

rename 's/\.pdf$/.doc/' *

changera Something.pdf en Something.doc. (La raison de la barre oblique inverse est que . est un caractère générique dans regexp. .pdf correspond donc à qPDFalors que \.pdf correspond uniquement à la chaîne exacte .pdf. Il est également très important de noter que si vous n'êtes pas familier avec BASH, vous devez mettre des barres obliques inverses entre guillemets SINGLE! Vous ne pouvez pas omettre les guillemets ni utiliser des guillemets doubles, sinon bash essaiera de les traduire. Pour bash \. et "\." est égal à .. "\ n" pour une nouvelle ligne, mais "\." n'étant pas une séquence d'échappement valide, il se traduit par .)

En fait, vous pouvez même inclure les parties de la chaîne entre guillemets au lieu de l'ensemble: 's/Search/Replace/g' est identique à s/'Search'/'Replace'/g et s/Search/Replace/g à BASH. Vous devez juste faire attention aux caractères spéciaux (et aux espaces).


Je suggère d'utiliser l'option -n lorsque vous n'êtes pas sûr d'avoir les expressions régulières correctes. Il montre ce qui serait renommé, puis quitte sans le faire. Par exemple:

rename -n s/'One'/'Two'/g *

Ceci listera tous les changements qu'il aurait faits si vous n'aviez pas mis l'indicateur -n ici. Si cela vous convient, appuyez sur Up pour revenir en arrière, effacez le -n et appuyez sur Enter (ou remplacez-le par -v pour afficher toutes les modifications apportées).

Remarque : Les versions Ubuntu supérieures à 17.04 ne sont pas livrées avec renamepar défaut, mais elles sont toujours disponibles dans les référentiels. Utilisez Sudo apt install rename pour l'installer

186
Matt

Essayez pyrénamère .

Ce n'est pas intégré à Nautilus, mais il fait le travail. Ici est une critique.

Thunar (partie de XFCE) possède également un renomeur que vous pouvez exécuter séparément.

Thunar bulk renamer

21
RolandiXor

Il semble y avoir un projet sur le tableau de bord appelé nautilus-renamer . Vous pouvez l'installer en exécutant make install une fois le script téléchargé et désarchivé. Il semble avoir certaines fonctionnalités ou, si vous connaissez certaines programmations, vous pouvez simplement l’améliorer selon vos besoins, car il ne s’agit que d’un script python.

enter image description here

9
sagarchalise

En ligne de commande, pour renommer un seul fichier, la commande est simplement

mv file1.txt file2.txt

Si vous voulez le faire en batch, vous voudrez probablement le faire via un script. Si vous fournissez plus de détails, moi-même ou quelqu'un d'autre pouvons probablement vous en préparer un. Cela dit, un script pour ajouter des éléments à un fichier pourrait ressembler à ceci:

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

En fonction de la manière dont vous avez besoin de renommer les éléments, cela sera probablement modifié, par exemple si vous devez suivre des règles de renommage spécifiques. (Personnellement, je le ferais via un script Perl car mon bash-foo n'est pas terrible, mais c'est juste moi.)

Notez que j'ai obtenu la séparation du nom de fichier et de l'extension de ne question précédemment posée .

8
Dang Khoa

Si vous souhaitez le faire sans ligne de commande, comme ce que vous avez fait dans Windows, utilisez touche fléchée droite au lieu de touche de tabulation. Ceci sélectionnera le fichier suivant comme le ferait l'onglet sous Windows.

7
Rafał Cieślak

Pas vraiment la même question que Comment renommer plusieurs fichiers à la fois? mais je vais suggérer le même programme que celui que j'ai suggéré dans cette réponse: qmv .

qmv est un outil pratique du paquet renameutils. Il vous permet d'utiliser votre éditeur de texte favori pour renommer des fichiers. Combiné à la puissance de vim, vous disposez d'un excellent utilitaire de changement de nom.

Je l’appelle généralement comme qmv -f do dans le répertoire où je veux renommer un tas de fichiers. Ou si je veux renommer récursivement qmv -R -f do.

Chaque fois que j'ai besoin de renommer plusieurs fichiers, je me rabat toujours sur qmv (et vim).

http://www.nongnu.org/renameutils/

7
dempa

Si la seule option qui convient consiste à renommer manuellement les fichiers, utilisez l’option vidir (dans le package moreutils ):

Sudo add-apt-repository universe && Sudo apt-get update && Sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.

Exemples


Renommer des fichiers de manière sélective

Contenu du répertoire de travail actuel:

.
├── bar
├── baz
└── foo

Exécutez vidir, renommez les noms de fichiers dans les lignes contenant les noms de fichiers que vous souhaitez renommer; frappé CTRL+O et CTRL+X:

screenshot3

.
├── bar.bak
├── baz.old
└── foo.new

Changer de nom de fichier de manière sélective

Contenu du répertoire de travail actuel:

.
├── bar
├── baz
└── foo

Contenu des fichiers du répertoire de travail actuel:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

Exécutez vidir, changez les nombres dans les lignes contenant les noms de fichiers que vous voulez changer; frappé CTRL+O et CTRL+X:

screenshot4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

Suppression sélective de fichiers

Contenu du répertoire de travail actuel:

.
├── bar
├── baz
└── foo

Exécutez vidir, supprimez les lignes contenant les fichiers que vous souhaitez supprimer; frappé CTRL+O et CTRL+X:

screenshot2

.
└── baz
3
kos

J'utilise krename. C'est une application graphique. Il pourrait lire les balises mp3 et ainsi de suite.

Il existe en tant qu'application distincte et fait partie de Krusader.

Il existe également un script rename - qui fait partie de l'installation standard de Perl (vous l'avez probablement déjà installé). Découvrez-le avec man rename.

2
Adobe