Linuxターミナルでファイルの移動や名前変更を行うのは簡単で手軽ですが、まずはその方法を理解する必要があります。マシンの前に座っている場合でも、SSH経由でリモート接続している場合でも、これらのコマンドを使ってマシン内でファイルを移動できます。
このハウツーでは、ファイルの移動と名前変更を行うコマンド「mv」の基本を学びます。また、このコマンドの高度な引数についてもいくつか紹介します。これらの引数はコマンドの使い勝手を向上させ、作業をより便利にします。
1つのファイルの名前を変更する
まずは、名前を変更するファイルを1つだけ作成するシンプルな例から始めましょう。コマンド構文は以下のとおりです。
mv <original name> <new name>
1. file1.txt という新しいファイルを作成します。
$ touch file1.txt
2. file1.txt の名前を newfile1.txt に変更します。mvコマンドは、同じディレクトリ内のファイルだけでなく、他の場所にあるファイルにも使用できます。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
$ mv file1.txt newfile1.txt
3.ディレクトリの内容を一覧表示して、新しいファイルを確認します。newfile1.txt が表示されるはずです。
$ ls
ファイルの移動
mvコマンドの主な用途はファイルの移動であり、構文は名前の変更と同じです。ソースとターゲットがあります。
ファイルをサブディレクトリに移動してみましょう。
1.新しいディレクトリ「MoveFilesHere」を作成します。
$ mkdir MoveFilesHere
2. touchコマンドを使って新しい空のファイルを作成します。touchはあらゆる種類のファイルを作成できますが、正しいデータが格納されるまでは、実際には空のシェルでしかありません。
$ touch blankfile.txt
3. mvコマンドを使用して、ファイルをサブディレクトリMoveFilesHereに移動します。ソースとしてblankfile.txtを指定し、次にターゲットとしてディレクトリ(この例ではディレクトリ)を指定します。また、ターゲットの場所とファイル名を渡すことで、新しい名前のディレクトリにファイルを移動することもできます。
$ mv blankfile.txt MoveFilesHere/
これは、MoveFilesHereディレクトリがblankfile.txtがあるディレクトリの直下にあることを前提としています。ファイルを別の階層のディレクトリに移動する場合は、フルパス(例:/home/pi/scripts)を指定する必要がある場合があります。また、移動先フォルダとして../を使用することで、ファイルを親ディレクトリに移動することもできます。
ファイルが正常に移動されたことを確認するには、lsコマンドを使用します。ここでは、ls(リスト)コマンドに、参照するディレクトリを指定する追加パラメータを渡しています。
$ ls MoveFilesHere/
ファイルを移動して名前を変更したい場合は、ターゲットを渡して、変更したいファイル名を指定します。上記の例を変更して、blankfile.txt を MoveFilesHere に移動し、namechanged.txt に名前を変更するには、次のコマンドを使用します。
$ mv blankfile.txt MoveFilesHere/namechanged.txt
Linuxで複数のファイルの名前を一括変更する方法
複数のファイルの名前を同時に変更する必要がある場合があります。バッチでの名前変更はmvコマンドで行いますが、ここでは名前を変更したいファイルに対して1行のBashスクリプトで繰り返し処理を行います。
1.実験用のファイルバッチを作成します。このコマンドは、a.txtからz.txtまでの26個のファイルを生成します。
$ touch {a..z}.txt
2.すべてのファイルの名前を .txt から .log に変更します。変数 (f) を作成し、すべての txt ファイル (*.txt) を反復処理する for ループを使用します。変数の値 (変数の呼び方は $f です) をファイル名に置き換え、f 変数に格納されているファイル名のパターンマッチング演算子 ((f%.txt}) を使用します) でファイル名を .txt から .log に変更します。コマンドの最後には、for ループの終了を示すために「done」を使用します。コードの「--」部分は、for ループの最初の部分 (名前を変更するファイルの選択) の終了位置と、2 番目の部分 (ファイル名の変更) の開始位置を示しています。
$ for f in *.txt; do mv -- "$f" "${f%.txt}.log"; done
Linux MVコマンドの探索
mv コマンドには、コマンド使用時に渡すことができる便利な引数(パラメータ)がいくつかあります。以下にいくつか例を挙げます。
ファイルを移動するときに対話型のプロンプトが必要な場合、たとえば新しいディレクトリに同一のファイルが存在する可能性がある場合、-i 引数は競合が見つかったときに決定を求めるプロンプトを表示します。
$ mv -i blankfile.txt MoveFilesHere
対話型プロンプトの反対は、コマンドにファイルの上書きを強制することです。このコマンドを実行する前に、ターゲットの場所を確認してください。
$ mv -f blankfile.txt MoveFilesHere
ファイルを移動したいけれど、既存のファイルを上書きしたくない場合はどうすればよいでしょうか?そのためには、–no-clobber (-n) が必要です。このコマンドはファイルをコピーしますが、ターゲットディレクトリ内の既存のファイルはスキップします。
$ mv -n blankfile.txt MoveFilesHere
更新されたファイルだけを移動したいですか? -u 引数を指定すると、コピー元ファイル(コピーしたいファイル)がコピー先ファイルよりも新しいかどうかがチェックされます。ログファイルの移動やドキュメントの増分バックアップに便利です。
$ mv -u blankfile.txt MoveFilesHere
最後に、どのファイルが移動されているかを確認したい場合は、-v(詳細)引数を使用して、コピー中のファイル名を表示できます。これは、簡単なデバッグやデータセンターの稼働状況を確認するのに便利です。
$ mv -v blankfile.txt MoveFilesHere