RnR は、正規表現をサポートし、複数のファイルやディレクトリの名前を安全に変更するためのコマンドライン ツールです。
最新のリリース ページからバイナリをダウンロードし、プラットフォームに対応する圧縮ファイルを選択できます。これらの圧縮ファイルには、実行可能ファイルと、完了ファイル ( Bash 、 Zsh 、 fish 、 PowerShell ) などのその他の追加コンテンツが含まれています。
最新バージョンのRnRを Arch Linux にインストールするためのパッケージが AUR ( 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
recursive ( -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
シェルに関する注意: 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