RnR — это инструмент командной строки для безопасного переименования нескольких файлов и каталогов, поддерживающий регулярные выражения.
Вы можете скачать двоичные файлы со страницы последней версии, выбрав сжатый файл, соответствующий вашей платформе. Эти сжатые файлы содержат исполняемый файл и другой дополнительный контент, такой как файлы завершения ( Bash , Zsh , fish и PowerShell ).
В AUR доступен пакет ( rnr
) для установки последней версии RnR в Arch Linux.
Вы можете использовать менеджер пакетов Homebrew для установки этого инструмента в системах macOS или Linux.
brew install rnr
RnR написан на Rust. Вы можете собрать его из исходного кода, используя 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
. Вы можете проверить синтаксис регулярных выражений здесь. Он поддерживает нумерованные и именованные группы захвата .from-file
. ПРИМЕЧАНИЕ ДЛЯ WINDOWS. В примерах, использующих *
, вам необходимо расширить подстановочный знак в PowerShell, например: rnr ab (Get-Item ./*)
. Это не поддерживается в cmd.exe
.
Вы можете передать список файлов для переименования в качестве аргументов:
rnr -f file renamed ./file-01.txt ./one/file-02.txt ./one/file-03.txt
Оригинальное дерево
.
├── file-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── file-02.txt
└── file-03.txt
Переименованное дерево
.
├── renamed-01.txt
├── file-02.txt
├── file-03.txt
└── one
├── file-01.txt
├── renamed-02.txt
└── renamed-03.txt
По умолчанию каталоги игнорируются, но вы также можете включить их для переименования с помощью опции -D
.
rnr -f -D foo bar ./ *
Оригинальное дерево
.
├── foo
│ └── foo.txt
└── foo.txt
Переименованное дерево
.
├── bar
│ └── foo.txt
└── bar.txt
По умолчанию предел замены установлен на 1, но вы можете настроить этот предел для замены нескольких непересекающихся совпадений. Все совпадения будут заменены, если для этой опции установлено значение 0.
rnr -f -l 0 o u ./ *
Оригинальное дерево
.
├── foo.txt
├── foofoo.txt
├── foofoofoo.txt
└── foofoofoofoo.txt
Переименованное дерево
.
├── fuu.txt
├── fuufuu.txt
├── fuufuufuu.txt
└── fuufuufuufuu.txt
Вы можете комбинировать rnr
с другими инструментами UNIX, используя каналы для передачи аргументов.
find . -type f +mtime 1 | xargs rnr -f file renamed
cat file_list.txt | xargs rnr -f file rename
Содержимое file_list.txt
:
file-01.txt
one/file-02.txt
one/file-03.txt
Если указана опция рекурсии ( -r
), rnr
будет рекурсивно искать все файлы по пути без ограничения глубины.
rnr -f -r file renamed ./
Оригинальное дерево
.
├── 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
Переименованное дерево
.
├── 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
Аналогичным образом вы можете установить максимальную глубину каталога в сочетании с рекурсивными операциями.
rnr -f -r -d 2 file renamed ./
Оригинальное дерево
.
├── 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
Переименованное дерево
.
├── 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
по умолчанию игнорирует скрытые файлы, чтобы ускорить операции и избежать проблем с некоторыми конкретными каталогами, такими как .git/
или .local/
. Вы можете включить скрытые файлы, указав опцию -x
. Кроме того, вы также можете использовать опцию включения каталогов -D
с -r
.
rnr -f -r -D -x foo bar ./
Оригинальное дерево
.
├── .foo_hidden_file.txt
├── foo.txt
├── foo
│ ├── foo.txt
│ └── foo
│ └── foo.txt
└── .foo_hidden_dir
└── foo.txt
Переименованное дерево
.
├── .bar_hidden_file.txt
├── bar.txt
├── bar
│ ├── bar.txt
│ └── bar
│ └── bar.txt
└── .bar_hidden_dir
└── bar.txt
Когда вы выполняете операцию переименования, rnr
по умолчанию создаст файл дампа в текущем каталоге, в котором вы выполнили команду. Этот файл можно использовать для легкого возврата операций с помощью параметра from-file
и -u
.
Операция переименования
rnr -f foo bar ./ *
Отменить предыдущую операцию
rnr from-file -f -u rnr-[timestamp].json
Если вы хотите повторить операцию, просто передайте файл дампа без каких-либо дополнительных аргументов:
rnr from-file -f rnr-[timestamp].json
rnr
может создавать файлы резервных копий перед переименованием для любой операции, передающей опцию -b
. Имена файлов резервных копий гарантированно уникальны и не будут перезаписаны при создании другой резервной копии. Если вы работаете с большим количеством больших файлов, учтите, что файлы будут дублироваться.
rnr -f -b file renamed ./ *
Оригинальное дерево
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Переименованное дерево
.
├── file-01.txt.bk
├── file-02.txt.bk
├── file-03.txt.bk
├── renamed-01.txt
├── renamed-02.txt
└── renamed-03.txt
rnr
может конвертировать имена файлов UTF-8 в их представление ASCII. Эта функция использует библиотеку AnyAscii для выполнения транслитерации.
Вы можете запустить:
rnr to-ascii ./ *
Или:
rnr to-ascii -r .
Оригинальное дерево
.
├── fïlé-01.txt
├── FïĹÊ-02.txt
└── file-03.txt
Переименованное дерево
.
├── file-01.txt
├── FILE-02.txt
└── file-03.txt
Дополнительная информация о регулярном выражении, используемом в пакете regex
.
rnr -f '..*$' '.txt' ./*
Оригинальное дерево
.
├── file-01.ext1
├── file-02.ext2
└── file-03.ext3
Переименованное дерево
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
rnr -f 'd' '1' ./*
Оригинальное дерево
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Переименованное дерево
.
├── file-11.txt
├── file-12.txt
└── file-13.txt
name(1)-number(2).extension(3)
].rnr -f ' (w+)-(d+).(w+) ' ' ${2}-${1}.${3} ' ./ *
Оригинальное дерево
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Переименованное дерево
.
├── 01-file.txt
├── 02-file.txt
└── 03-file.txt
ПРИМЕЧАНИЕ SHELL. В таких оболочках, как Bash и zsh, обязательно заключайте шаблон REPLACEMENT
в одинарные кавычки. В противном случае индексы групп захвата будут заменены расширенными переменными оболочки.
number
.ext
.rnr -f ' (?P<number>d{2}).(?P<ext>w{3}) ' ' ${ext}.${number} ' ./ *
Оригинальное дерево
.
├── file-01.txt
├── file-02.txt
└── file-03.txt
Переименованное дерево
.
├── file-txt.01
├── file-txt.02
└── file-txt.03