RnR é uma ferramenta de linha de comando para renomear com segurança vários arquivos e diretórios que suportam expressões regulares.
Você pode baixar binários da página de lançamento mais recente, escolher o arquivo compactado correspondente à sua plataforma. Esses arquivos compactados contêm o executável e outros conteúdos adicionais, como arquivos de conclusão ( Bash , Zsh , fish e PowerShell ).
Um pacote está disponível no AUR ( rnr
) para instalar a versão mais recente do RnR no Arch Linux.
Você pode usar o gerenciador de pacotes Homebrew para instalar esta ferramenta em sistemas macOS ou Linux.
brew install rnr
RnR está escrito em Rust. Você pode construí-lo a partir do código-fonte 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
. Você pode verificar a sintaxe regex aqui. Suporta grupos de captura numerados e nomeados.from-file
. NOTA DO WINDOWS: Nos exemplos que usam *
, você precisa expandir o curinga no PowerShell, por exemplo: rnr ab (Get-Item ./*)
. Isso não é compatível com cmd.exe
.
Você pode passar uma lista de arquivos a serem renomeados como argumentos:
rnr -f file renamed ./file-01.txt ./one/file-02.txt ./one/file-03.txt
Árvore original
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árvore renomeada
.
├── renamed-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── renamed-02.txt
└── renamed-03.txt
Os diretórios são ignorados por padrão, mas você também pode incluí-los para serem renomeados usando a opção -D
.
rnr -f -D foo bar ./ *
Árvore original
.
├── foo
│ └── foo.txt
└── foo.txt
Árvore renomeada
.
├── bar
│ └── foo.txt
└── bar.txt
O limite de substituição é definido como 1 por padrão, mas você pode configurar esse limite para substituir diversas correspondências não sobrepostas. Todas as correspondências serão substituídas se esta opção for definida como 0.
rnr -f -l 0 o u ./ *
Árvore original
.
├── foo.txt
├── foofoo.txt
├── foofoofoo.txt
└── foofoofoofoo.txt
Árvore renomeada
.
├── fuu.txt
├── fuufuu.txt
├── fuufuufuu.txt
└── fuufuufuufuu.txt
Você pode combinar rnr
com outras ferramentas UNIX usando pipes para passar argumentos.
find . -type f +mtime 1 | xargs rnr -f file renamed
cat file_list.txt | xargs rnr -f file rename
conteúdo file_list.txt
:
file-01.txt
one/file-02.txt
one/file-03.txt
Se a opção recursiva ( -r
) for passada, rnr
procurará todos os arquivos no caminho recursivamente sem limite de profundidade.
rnr -f -r file renamed ./
Árvore 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
Árvore renomeada
.
├── 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
Da mesma forma, você pode definir uma profundidade máxima de diretório em combinação com operações recursivas.
rnr -f -r -d 2 file renamed ./
Árvore 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
Árvore renomeada
.
├── 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 arquivos ocultos por padrão para acelerar as operações e evitar problemas com alguns diretórios específicos como .git/
ou .local/
. Você pode incluir arquivos ocultos passando a opção -x
. Além disso, você também pode usar a opção incluir diretórios -D
com -r
.
rnr -f -r -D -x foo bar ./
Árvore original
.
├── .foo_hidden_file.txt
├── foo.txt
├── foo
│ ├── foo.txt
│ └── foo
│ └── foo.txt
└── .foo_hidden_dir
└── foo.txt
Árvore renomeada
.
├── .bar_hidden_file.txt
├── bar.txt
├── bar
│ ├── bar.txt
│ └── bar
│ └── bar.txt
└── .bar_hidden_dir
└── bar.txt
Quando você executa uma operação de renomeação, rnr
criará por padrão um arquivo de despejo no diretório atual em que você executou o comando. Este arquivo pode ser usado para reverter facilmente as operações usando a opção from-file
e -u
.
Renomear operação
rnr -f foo bar ./ *
Desfazer operação anterior
rnr from-file -f -u rnr-[timestamp].json
Se quiser refazer a operação basta passar o arquivo dump sem nenhum argumento adicional:
rnr from-file -f rnr-[timestamp].json
rnr
pode criar arquivos de backup antes de renomear para qualquer operação passando a opção -b
. Os nomes dos arquivos de backup são exclusivos e não serão substituídos se outro backup for criado. Se você estiver trabalhando com muitos arquivos grandes, leve em consideração que os arquivos serão duplicados.
rnr -f -b file renamed ./ *
Árvore original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árvore renomeada
.
├── file-01.txt.bk
├── file-02.txt.bk
├── file-03.txt.bk
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
rnr
pode converter nomes de arquivos UTF-8 em sua representação ASCII. Este recurso usa a biblioteca AnyAscii para realizar a transliteração.
Você pode executar:
rnr to-ascii ./ *
Ou:
rnr to-ascii -r .
Árvore original
.
├── fïlé-01.txt
├── FïĹÊ-02.txt
└── file-03.txt
Árvore renomeada
.
├── file-01.txt
├── FILE-02.txt
└── file-03.txt
Mais informações sobre regex usado no pacote regex
.
rnr -f '..*$' '.txt' ./*
Árvore original
.
├── file-01.ext1
├── file-02.ext2
└── file-03.ext3
Árvore renomeada
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr -f 'd' '1' ./*
Árvore original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árvore renomeada
.
├── file-11.txt
├── file-12.txt
└── file-13.txt
name(1)-number(2).extension(3)
].rnr -f ' (w+)-(d+).(w+) ' ' ${2}-${1}.${3} ' ./ *
Árvore original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árvore renomeada
.
├── 01-file.txt
├── 02-file.txt
└── 03-file.txt
NOTA DE SHELL: Em shells como Bash e zsh, certifique-se de colocar o padrão REPLACEMENT
entre aspas simples. Caso contrário, os índices do grupo de captura serão substituídos por variáveis de shell expandidas.
number
.ext
.rnr -f ' (?P<number>d{2}).(?P<ext>w{3}) ' ' ${ext}.${number} ' ./ *
Árvore original
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Árvore renomeada
.
├── file-txt.01
├── file-txt.02
└── file-txt.03