Comment renommer facilement des fichiers en utilisant la ligne de commande?

95

L'une des manières 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 sous Linux, je pense qu'il doit y avoir une alternative à la ligne de commande.

Cependant, il se peut que je veuille 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

    
posée Jiew Meng 25.08.2011 - 03:18
la source

8 réponses

171

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

rename "s/SEARCH/REPLACE/g"  *

Cela remplacera la chaîne SEARCH par REPLACE dans chaque fichier (c'est-à-dire * ). Le /g signifie global, donc si vous aviez un SEARCH_SEARCH.jpg , il serait renommé REPLACE_REPLACE.jpg . Si vous n'aviez pas /g , la substitution n'aurait eu lieu qu'une seule fois et s'appellerait désormais REPLACE_SEARCH.jpg . Si vous voulez que la casse ne soit pas prise en compte, ajoutez /i (c'est-à-dire /gi ou /ig à la fin).

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

Notez que cette commande rename correspond à la commande prename (également appelée Perl rename ), qui prend en charge Perl expressions régulières. Il y a un autre rename qui utilise des modèles et n'est pas aussi puissant. prename était installé par défaut sur Ubuntu (avec Perl), mais vous devrez peut-être le faire maintenant:

sudo apt install rename

Voici quelques exemples:

Préfixe

Ajouter :

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

Supprimer :

Vous pouvez également supprimer les chaînes indésirables. Disons que vous aviez 20 fichiers MP3 nommés comme CD RIP 01 Song.mp3 et que vous vouliez supprimer la partie "CD RIP", et que vous vouliez la supprimer de tous 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 l'espace, tous les fichiers auront un espace comme premier caractère du fichier. Notez également que cela fonctionnera sans le caractère ^ , mais correspondra à CD RIP  dans n'importe quelle partie du nom de fichier. Le ^ garantit qu'il ne supprime les caractères que s'ils sont le début du fichier.

Suffixe

Ajouter :

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

Modifier :

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 l'expression rationnelle, donc que .pdf correspond à qPDF alors que \.pdf ne correspond qu'à la chaîne exacte .pdf . BASH, vous devez mettre des barres obliques inverses dans des guillemets SINGLE! Vous ne pouvez pas omettre de guillemets ou utiliser des guillemets doubles, ou bash va essayer de les traduire. Mais les guillemets doubles et les barres obliques inverses sont utilisés, par exemple "\ n" pour une nouvelle ligne, mais puisque \. n'est pas une séquence d'échappement arrière valide, elle se traduit par "\." )

En fait, vous pouvez même placer les parties de la chaîne entre guillemets au lieu de la totalité: . est identique à "\." et . à BASH. Il suffit de faire attention aux caractères spéciaux (et aux espaces).

Je suggère d'utiliser l'option 's/Search/Replace/g' lorsque vous n'êtes pas certain 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 *

Cela listera toutes les modifications qu’il aurait apportées, si vous n’aviez pas mis l’indicateur s/'Search'/'Replace'/g à cet endroit. Si cela semble bon, appuyez sur Up pour revenir en arrière, puis effacez s/Search/Replace/g et appuyez sur Enter (ou remplacez-le par -n pour afficher toutes les modifications).

    
réponse donnée Matt 25.08.2011 - 15:45
la source
21

Essayez pyrenamer .

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

Thunar (qui fait partie de XFCE) contient également un nouveau nom que vous pouvez exécuter séparément.

    
réponse donnée RolandiXor 25.08.2011 - 03:37
la source
9

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écompressé. Il semble avoir quelques fonctionnalités ou si vous savez que certaines programmations sont possibles, vous pourriez simplement les améliorer en fonction de vos besoins, car il ne s'agit que d'un script python.

    
réponse donnée sagarchalise 25.08.2011 - 09:06
la source
8

Dans la 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 ou quelqu'un d'autre, nous pourrons probablement vous en fouetter une. Cela dit, un script pour ajouter des éléments à un fichier peut 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

Selon la manière dont vous avez besoin de changer les choses, cela sera probablement modifié, par exemple si vous avez des règles de renommage spécifiques à suivre. (Personnellement, je le ferais via un script Perl car mon bash-foo n'est pas génial, mais c'est juste moi.)

Notez que j'ai séparé le nom du fichier et l’extension de une question posée précédemment .

    
réponse donnée Dang Khoa 25.08.2011 - 04:19
la source
7

Si vous voulez le faire sans ligne de commande, comme pour Windows, utilisez la touche flèche droite au lieu de la touche tabulation . Cela sélectionnera le fichier suivant, tout comme l’onglet de Windows.

    
réponse donnée Rafał Cieślak 25.08.2011 - 17:13
la source
7

Pas vraiment la même question que Comment renommer plusieurs fichiers à la fois? mais je vais suggérer le même programme 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 préféré pour renommer des fichiers. Combiné à la puissance de vim, vous disposez d’un excellent utilitaire de renommage.

Je l'appelle généralement comme qmv -f do dans le répertoire où je veux renommer un groupe 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).

lien

    
réponse donnée dempa 30.08.2011 - 22:47
la source
3

Si la seule option appropriée consiste à renommer les fichiers manuellement, une excellente façon de procéder consiste à utiliser 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 les 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 à renommer; frapper CTRL + O et CTRL + X :

.
├── 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 en cours:

$ 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 numéros dans les lignes contenant les noms de fichiers que vous souhaitez changer; frapper CTRL + O et CTRL + X :

.
├── 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; frapper CTRL + O et CTRL + X :

.
└── baz
    
réponse donnée kos 10.02.2016 - 11:07
la source
2

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

Il existe aussi bien en tant qu’application séparée qu’une partie de Krusader.

Il y a aussi un script rename - qui fait partie de l'installation standard de perl (vous l'avez probablement installé). Vérifiez-le avec man rename .

    
réponse donnée Adobe 25.08.2011 - 08:49
la source

Lire d'autres questions sur les étiquettes