RnR est un outil de ligne de commande permettant de renommer en toute sécurité plusieurs fichiers et répertoires prenant en charge les expressions régulières.
Vous pouvez télécharger les binaires depuis la page de la dernière version, choisir le fichier compressé correspondant à votre plateforme. Ces fichiers compressés contiennent l'exécutable et d'autres contenus supplémentaires tels que des fichiers de complétion ( Bash , Zsh , fish et PowerShell ).
Un package est disponible dans l'AUR ( rnr
) pour installer la dernière version de RnR sur Arch Linux.
Vous pouvez utiliser le gestionnaire de packages Homebrew pour installer cet outil sur les systèmes macOS ou Linux.
brew install rnr
RnR est écrit en Rust. Vous pouvez le construire à partir des sources en utilisant Cargo.
git clone https://github.com/ismaelgv/rnr .
cargo install
cargo install rnr
USAGE:
rnr [FLAGS] [OPTIONS] <EXPRESSION> <REPLACEMENT> <PATH(S)>...
rnr [FLAGS] [OPTIONS] <SUBCOMMAND>
FLAGS:
-b, --backup Generate file backups before renaming
-n, --dry-run Only show what would be done (default mode)
--dump Force dumping operations into a file even in dry-run mode
-f, --force Make actual changes to files
-h, --help Prints help information
-x, --hidden Include hidden files and directories
-D, --include-dirs Rename matching directories
--no-dump Do not dump operations into a file
-r, --recursive Recursive mode
-s, --silent Do not print any information
-V, --version Prints version information
OPTIONS:
--color <color> Set color output mode [default: auto] [possible values: always, auto, never]
-d, --max-depth <LEVEL> Set max depth in recursive mode
-l, --replace-limit <LIMIT> Limit of replacements, all matches if set to 0 [default: 1]
ARGS:
<EXPRESSION> Expression to match (can be a regex)
<REPLACEMENT> Expression replacement
<PATH(S)>... Target paths
SUBCOMMANDS:
from-file Read operations from a dump file
help Prints this message or the help of the given subcommand(s)
to-ascii Replace all file name chars with ASCII chars. This operation is extremely lossy.
regex
. Vous pouvez vérifier la syntaxe des regex ici. Il prend en charge les groupes de capture numérotés et nommés.from-file
. REMARQUE WINDOWS : dans les exemples qui utilisent *
, vous devez développer le caractère générique dans PowerShell, par exemple : rnr ab (Get-Item ./*)
. Ceci n'est pas pris en charge dans cmd.exe
.
Vous pouvez passer une liste de fichiers à renommer en arguments :
rnr -f file renamed ./file-01.txt ./one/file-02.txt ./one/file-03.txt
Arbre original
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── renamed-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── renamed-02.txt
└── renamed-03.txt
Les répertoires sont ignorés par défaut mais vous pouvez également les inclure pour les renommer à l'aide de l'option -D
.
rnr -f -D foo bar ./ *
Arbre original
.
├── foo
│ └── foo.txt
└── foo.txt
Arbre renommé
.
├── bar
│ └── foo.txt
└── bar.txt
La limite de remplacement est définie sur 1 par défaut, mais vous pouvez configurer cette limite pour remplacer plusieurs correspondances qui ne se chevauchent pas. Toutes les correspondances seront remplacées si cette option est définie sur 0.
rnr -f -l 0 o u ./ *
Arbre original
.
├── foo.txt
├── foofoo.txt
├── foofoofoo.txt
└── foofoofoofoo.txt
Arbre renommé
.
├── fuu.txt
├── fuufuu.txt
├── fuufuufuu.txt
└── fuufuufuufuu.txt
Vous pouvez combiner rnr
avec d'autres outils UNIX en utilisant des canaux pour transmettre des arguments.
find . -type f +mtime 1 | xargs rnr -f file renamed
cat file_list.txt | xargs rnr -f file rename
Contenu file_list.txt
:
file-01.txt
one/file-02.txt
one/file-03.txt
Si l'option récursive ( -r
) est passée, rnr
recherchera tous les fichiers dans le chemin de manière récursive sans limite de profondeur.
rnr -f -r file renamed ./
Arbre original
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── one
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── two
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── three
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
De même, vous pouvez définir une profondeur de répertoire maximale en combinaison avec des opérations récursives.
rnr -f -r -d 2 file renamed ./
Arbre original
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── one
├── renamed-01.txt
├── renamed-02.txt
├── renamed-03.txt
└── two
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── three
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr
ignore les fichiers cachés par défaut pour accélérer les opérations et éviter les problèmes avec certains répertoires particuliers comme .git/
ou .local/
. Vous pouvez inclure des fichiers cachés en passant l'option -x
. En outre, vous pouvez également utiliser l'option include directorys -D
avec -r
.
rnr -f -r -D -x foo bar ./
Arbre original
.
├── .foo_hidden_file.txt
├── foo.txt
├── foo
│ ├── foo.txt
│ └── foo
│ └── foo.txt
└── .foo_hidden_dir
└── foo.txt
Arbre renommé
.
├── .bar_hidden_file.txt
├── bar.txt
├── bar
│ ├── bar.txt
│ └── bar
│ └── bar.txt
└── .bar_hidden_dir
└── bar.txt
Lorsque vous effectuez une opération de renommage, rnr
créera par défaut un fichier de vidage dans le répertoire actuel dans lequel vous avez exécuté la commande. Ce fichier peut être utilisé pour annuler facilement les opérations à l'aide de l'option from-file
et -u
.
Opération Renommer
rnr -f foo bar ./ *
Annuler l'opération précédente
rnr from-file -f -u rnr-[timestamp].json
Si vous souhaitez refaire l'opération, transmettez simplement le fichier dump sans aucun argument supplémentaire :
rnr from-file -f rnr-[timestamp].json
rnr
peut créer des fichiers de sauvegarde avant de renommer toute opération passant l'option -b
. Les noms des fichiers de sauvegarde sont garantis uniques et ne seront pas écrasés si une autre sauvegarde est créée. Si vous travaillez avec de nombreux fichiers volumineux, tenez compte du fait que les fichiers seront dupliqués.
rnr -f -b file renamed ./ *
Arbre original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── file-01.txt.bk
├── file-02.txt.bk
├── file-03.txt.bk
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
rnr
peut convertir les noms de fichiers UTF-8 en leur représentation ASCII. Cette fonctionnalité utilise la bibliothèque AnyAscii pour effectuer la translittération.
Vous pouvez exécuter :
rnr to-ascii ./ *
Ou:
rnr to-ascii -r .
Arbre original
.
├── fïlé-01.txt
├── FïĹÊ-02.txt
└── file-03.txt
Arbre renommé
.
├── file-01.txt
├── FILE-02.txt
└── file-03.txt
Plus d'informations sur les regex utilisées dans le package regex
.
rnr -f '..*$' '.txt' ./*
Arbre original
.
├── file-01.ext1
├── file-02.ext2
└── file-03.ext3
Arbre renommé
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr -f 'd' '1' ./*
Arbre original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── file-11.txt
├── file-12.txt
└── file-13.txt
name(1)-number(2).extension(3)
].rnr -f ' (w+)-(d+).(w+) ' ' ${2}-${1}.${3} ' ./ *
Arbre original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── 01-file.txt
├── 02-file.txt
└── 03-file.txt
REMARQUE SUR LE SHELL : Dans les shells comme Bash et zsh, assurez-vous de placer le modèle REPLACEMENT
entre guillemets simples. Sinon, les indices de groupe de capture seront remplacés par des variables shell étendues.
number
.ext
.rnr -f ' (?P<number>d{2}).(?P<ext>w{3}) ' ' ${ext}.${number} ' ./ *
Arbre original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Arbre renommé
.
├── file-txt.01
├── file-txt.02
└── file-txt.03