RnR是一個命令列工具,可以安全地重新命名多個支援正規表示式的檔案和目錄。
您可以從最新版本頁面下載二進位文件,選擇與您的平台對應的壓縮文件。這些壓縮檔案包含可執行檔和其他附加內容,例如完成檔案( Bash 、 Zsh 、 fish和PowerShell )。
AUR ( rnr
) 中提供了一個軟體包,用於在 Arch Linux 上安裝最新版本的RnR 。
您可以使用 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
包中使用的 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 等 shell 中,請確保將REPLACEMENT
模式以單引號引起來。否則,捕獲組索引將被擴展的 shell 變數取代。
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