RnR es una herramienta de línea de comandos para cambiar el nombre de forma segura de varios archivos y directorios que admite expresiones regulares.
Puede descargar binarios desde la página de la última versión, elija el archivo comprimido correspondiente a su plataforma. Estos archivos comprimidos contienen el ejecutable y otro contenido adicional, como archivos de finalización ( Bash , Zsh , fish y PowerShell ).
Hay un paquete disponible en AUR ( rnr
) para instalar la última versión de RnR en Arch Linux.
Puede utilizar el administrador de paquetes Homebrew para instalar esta herramienta en sistemas macOS o Linux.
brew install rnr
RnR está escrito en Rust. Puedes construirlo desde la fuente usando 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
. Puede consultar la sintaxis de expresiones regulares aquí. Admite grupos de captura numerados y nombrados.from-file
. NOTA DE WINDOWS: En los ejemplos que usan *
, debe expandir el comodín en PowerShell, por ejemplo: rnr ab (Get-Item ./*)
. Esto no es compatible con cmd.exe
.
Puede pasar una lista de archivos a los que se les cambiará el nombre como argumentos:
rnr -f file renamed ./file-01.txt ./one/file-02.txt ./one/file-03.txt
árbol original
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árbol renombrado
.
├── renamed-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── renamed-02.txt
└── renamed-03.txt
Los directorios se ignoran de forma predeterminada, pero también puede incluirlos para cambiarles el nombre usando la opción -D
.
rnr -f -D foo bar ./ *
árbol original
.
├── foo
│ └── foo.txt
└── foo.txt
Árbol renombrado
.
├── bar
│ └── foo.txt
└── bar.txt
El límite de reemplazo está establecido en 1 de forma predeterminada, pero puede configurar este límite para reemplazar múltiples coincidencias que no se superpongan. Todas las coincidencias serán reemplazadas si esta opción se establece en 0.
rnr -f -l 0 o u ./ *
árbol original
.
├── foo.txt
├── foofoo.txt
├── foofoofoo.txt
└── foofoofoofoo.txt
Árbol renombrado
.
├── fuu.txt
├── fuufuu.txt
├── fuufuufuu.txt
└── fuufuufuufuu.txt
Puede combinar rnr
con otras herramientas UNIX usando canalizaciones para pasar argumentos.
find . -type f +mtime 1 | xargs rnr -f file renamed
cat file_list.txt | xargs rnr -f file rename
contenido file_list.txt
:
file-01.txt
one/file-02.txt
one/file-03.txt
Si se pasa la opción recursiva ( -r
), rnr
buscará todos los archivos en la ruta de forma recursiva sin límite de profundidad.
rnr -f -r file renamed ./
árbol 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
Árbol renombrado
.
├── 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 manera similar, puede establecer una profundidad máxima de directorio en combinación con operaciones recursivas.
rnr -f -r -d 2 file renamed ./
árbol 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
Árbol renombrado
.
├── 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
ignora los archivos ocultos de forma predeterminada para acelerar las operaciones y evitar problemas con algunos directorios particulares como .git/
o .local/
. Puede incluir archivos ocultos pasando la opción -x
. Además, puede utilizar la opción incluir directorios -D
con -r
también.
rnr -f -r -D -x foo bar ./
árbol original
.
├── .foo_hidden_file.txt
├── foo.txt
├── foo
│ ├── foo.txt
│ └── foo
│ └── foo.txt
└── .foo_hidden_dir
└── foo.txt
Árbol renombrado
.
├── .bar_hidden_file.txt
├── bar.txt
├── bar
│ ├── bar.txt
│ └── bar
│ └── bar.txt
└── .bar_hidden_dir
└── bar.txt
Cuando realiza una operación de cambio de nombre, rnr
creará de forma predeterminada un archivo de volcado en el directorio actual donde ejecutó el comando. Este archivo se puede utilizar para revertir fácilmente las operaciones utilizando la opción from-file
y -u
.
Operación de cambio de nombre
rnr -f foo bar ./ *
Deshacer operación anterior
rnr from-file -f -u rnr-[timestamp].json
Si desea rehacer la operación, simplemente pase el archivo de volcado sin ningún argumento adicional:
rnr from-file -f rnr-[timestamp].json
rnr
puede crear archivos de respaldo antes de cambiar el nombre para cualquier operación que pase la opción -b
. Se garantiza que los nombres de los archivos de copia de seguridad sean únicos y no se sobrescribirán si se crea otra copia de seguridad. Si está trabajando con muchos archivos grandes, tenga en cuenta que los archivos se duplicarán.
rnr -f -b file renamed ./ *
árbol original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árbol renombrado
.
├── file-01.txt.bk
├── file-02.txt.bk
├── file-03.txt.bk
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
rnr
puede convertir nombres de archivos UTF-8 a su representación ASCII. Esta función utiliza la biblioteca AnyAscii para realizar la transliteración.
Puedes ejecutar:
rnr to-ascii ./ *
O:
rnr to-ascii -r .
árbol original
.
├── fïlé-01.txt
├── FïĹÊ-02.txt
└── file-03.txt
Árbol renombrado
.
├── file-01.txt
├── FILE-02.txt
└── file-03.txt
Más información sobre las expresiones regulares utilizadas en el paquete de regex
.
rnr -f '..*$' '.txt' ./*
árbol original
.
├── file-01.ext1
├── file-02.ext2
└── file-03.ext3
Árbol renombrado
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr -f 'd' '1' ./*
árbol original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árbol renombrado
.
├── file-11.txt
├── file-12.txt
└── file-13.txt
name(1)-number(2).extension(3)
].rnr -f ' (w+)-(d+).(w+) ' ' ${2}-${1}.${3} ' ./ *
árbol original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árbol renombrado
.
├── 01-file.txt
├── 02-file.txt
└── 03-file.txt
NOTA DE SHELL: En shells como Bash y zsh, asegúrese de incluir el patrón REPLACEMENT
entre comillas simples. De lo contrario, los índices del grupo de captura serán reemplazados por variables de shell expandidas.
number
.ext
.rnr -f ' (?P<number>d{2}).(?P<ext>w{3}) ' ' ${ext}.${number} ' ./ *
árbol original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árbol renombrado
.
├── file-txt.01
├── file-txt.02
└── file-txt.03