Linuxで、複数ファイルのファイル名を一括で変更することが出来る「rename」コマンドの使い方を解説します。
執筆時の検証環境
renameコマンドは、様々なOSで提供されており、OSごとに仕様が異なります。
以下は、本記事を執筆した際に使用した環境です。
- OS:AlmaLinux release 8.4 (Electric Cheetah)
- renameコマンドのバージョン:rename from util-linux 2.32.1
書式
renameコマンドの基本的な書式になります。
rename 置換前文字列 置換先文字列 ファイル名1 ファイル名2 ...
オプション
renameコマンドで使用出来るオプションの一覧です。
オプション | 説明 |
---|---|
-v-- verbose | コマンドの成功時に、どのファイルをリネームしたかの詳細情報を表示する |
-s-- symlink | シンボリックリンクではなく、シンボリックリンクの参照先を変更する |
-n-- no-act | リネームを実行しない。 -v( -- verbose)と組み合わせることで、リネーム対象のファイルの一覧を取得することが出来る |
-o-- no-overwrite | 既存のファイルを上書きしない -s( -- symlink)と組み合わせることで、シンボリックリンクに参照先がある場合は上書きしない |
-h-- help | コマンドのヘルプを表示する |
-V-- version | コマンドのバージョン情報を表示する |
使用例
renameコマンドや各オプションの使用例を説明します。
オプションなし
オプションを付けない実行例を説明します。
「file1.txt」の拡張子を「.txt」から「.log」に変更する例です。
[root@SYUTAKUWEB01 ~]# ls file1.txt [root@SYUTAKUWEB01 ~]# rename .txt .log file1.txt [root@SYUTAKUWEB01 ~]# ls file1.log
複数のファイルを一括でリネームする
複数のファイルを一括でリネームする方法を説明します。
あるディレクトリ内の3ファイルのうち、2ファイルの拡張子を変更する例です。
[root@SYUTAKUWEB01 ~]# ls -1 file1.log file2.log file3.log [root@SYUTAKUWEB01 ~]# rename .log .txt file1.log file2.log [root@SYUTAKUWEB01 ~]# ls -1 file1.txt file2.txt file3.log
ワイルドカードを使用してリネームする
ワイルドカードを使用してリネームする方法を説明します。
ワイルドカードを使用し、ファイル名が「file~」となっているファイルのみを対象にリネームする例です。
[root@SYUTAKUWEB01 ~]# ls -1 file1.txt file2.txt file3.txt text1.txt [root@SYUTAKUWEB01 ~]# rename .txt .log file* [root@SYUTAKUWEB01 ~]# ls -1 file1.log file2.log file3.log text1.txt
-v(--version):詳細情報の表示
v(version)オプションを付けると、詳細情報(リネームしたファイル)を表示させることが可能です。
[root@SYUTAKUWEB01 ~]# rename -v .log .txt * `file1.log' -> `file1.txt' `file2.log' -> `file2.txt' `file3.log' -> `file3.txt'
-s(--symlink):シンボリックリンクの参照先をリネーム
s(symlink)オプションを付けると、シンボリックリンクの参照先をリネームすることが可能です。
下記は、シンボリックリンク「text1.txt」の参照先を「file1.txt」から「file2.txt」に変更する例です。
[root@SYUTAKUWEB01 ~]# ll 合計 0 -rw-r--r-- 1 root root 0 10月 28 01:02 file1.txt -rw-r--r-- 1 root root 0 10月 28 01:06 file2.txt -rw-r--r-- 1 root root 0 10月 28 01:06 file3.txt lrwxrwxrwx 1 root root 9 10月 28 02:05 text1.txt -> file1.txt [root@SYUTAKUWEB01 ~]# rename -s 1 2 text1.txt [root@SYUTAKUWEB01 ~]# ll 合計 0 -rw-r--r-- 1 root root 0 10月 28 01:02 file1.txt -rw-r--r-- 1 root root 0 10月 28 01:06 file2.txt -rw-r--r-- 1 root root 0 10月 28 01:06 file3.txt lrwxrwxrwx 1 root root 9 10月 28 02:05 text1.txt -> file2.txt
-n(--no-act):リネームを実行しない
n(no-act)オプションを付けることで、実際にはリネームを実行せずにコマンドを実行することが可能です。
このオプションは単体で使用せずに、vオプションと組み合わせて使用することで、リネーム対象のファイル一覧を取得することが出来ます。
下記のサンプルでは、ファイル名が「file~」となっているファイルを対象にリネームするコマンドを実行しています。
どのファイルが、どのようにリネームされるか表示されていますが、実際にはリネームされていないことが確認出来ます。
このように、リネーム前に対象が誤っていないかを事前にチェックする際などに役立ちます。
[root@SYUTAKUWEB01 ~]# ls -1 file1.txt file2.txt file3.txt text1.txt [root@SYUTAKUWEB01 ~]# rename -nv .txt .log file* `file1.txt' -> `file1.log' `file2.txt' -> `file2.log' `file3.txt' -> `file3.log' [root@SYUTAKUWEB01 ~]# ls -1 file1.txt file2.txt file3.txt text1.txt
-o(--no-overwrite):既存のファイルを上書きしない
o(no-overwrite)オプションのヘルプでは、既存のファイルを上書きしないとなっていますが、実際の仕様は少し違うので、そこを説明したいと思います。
まず、oオプションは単体で使用するのではなく、sオプションと組み合わせて使用します。
sオプションと組み合わせることで、参照先が存在しないシンボリックリンクの参照先を変更することが可能です。
少し言い回しがややこしいので、実際の例を見てみましょう。
下記は、参照先の無いシンボリックリンク「link2.txt」の参照先のみを対象にリネームしている例です。
リネーム対象のファイル名は「link*」といるため、「link1.txt」と「link2.txt」が対象になっているように見えますが、オプションとして「os」を付けているため、参照先が無い「link2.txt」のみがリネーム対象となっています。
このように、osオプションを使用することで、参照先が無いシンボリックリンクのみを対象にリネームすることが可能です。
[root@SYUTAKUWEB01 ~]# ll 合計 0 -rw-r--r-- 1 root root 0 10月 28 02:45 file123.txt lrwxrwxrwx 1 root root 11 10月 28 03:03 link1.txt -> file123.txt lrwxrwxrwx 1 root root 11 10月 28 03:04 link2.txt -> file323.txt [root@SYUTAKUWEB01 ~]# rename -os 3 1 link* [root@SYUTAKUWEB01 ~]# ll 合計 0 -rw-r--r-- 1 root root 0 10月 28 02:45 file123.txt lrwxrwxrwx 1 root root 11 10月 28 03:03 link1.txt -> file123.txt lrwxrwxrwx 1 root root 11 10月 28 03:04 link2.txt -> file123.txt
-h(--help):ヘルプを表示する
h(help)オプションを使用することで、コマンドのオプションを表示することが出来ます。
下記は、実行例になります。
[root@SYUTAKUWEB01 ~]# rename -h 使い方: rename [options] <expression> <replacement> <file>... ファイル名を変更します。 オプション: -v, --verbose explain what is being done -s, --symlink act on the target of symlinks -n, --no-act do not make any changes -o, --no-overwrite don't overwrite existing files -h, --help このヘルプを表示します -V, --version バージョンを表示します 詳しくは rename(1) をお読みください。
-V(--version):バージョン情報を表示する
V(version)オプションを使用することで、コマンドのバージョン情報を表示することが出来ます。
下記は、実行例になります。
[root@SYUTAKUWEB01 ~]# rename -V rename from util-linux 2.32.1
コメント