【Linux】renameコマンドで複数のファイル名を一括変更


この記事はプロモーションを含みます。

Linux

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

コメント

タイトルとURLをコピーしました