ファイル名・ディレクトリ名の変更(リネーム)

 次にファイル名の変更についてです。mvコマンドはファイル・ディレクトリの移動だけでなくファイル名の変更という機能もあります。最初にUNIXコマンドを学習し始めた時にファイル名の変更はどうするのかわかりませんでした。PC-9801などで使われていたMS-DOSにはRENというファイル名を変更するコマンドがあり、UNIXにも当然あるだろうと思って探したらファイルの移動を行うmvを使う、とあり専用コマンドがないの?と思ってしまいました。でもまあ、ファイル名の変更ができれば何でもOK、気にしないということにしました。まあ、それはよしとして本題に戻りましょう。

mvコマンドでファイル名を変更する場合はmvの後に変更前のファイル名、最後のパラメーターに変更後のファイル名を指定します。
とりあえず練習としてデスクトップ上にあるtestフォルダに移動します(すでに作成済みのはずですが、もし消してしまったら作成してください)。これでカレントディレクトリがtestになります。

cd ~/Desktop/test

1.txtというファイルを作成します。bash,zshでは以下のように入力します。

touch 1.txt

PowerShellでは以下のように入力します。

New-Item -type file 1.txt

それでは、この1.txtのファイル名を2.txtに変更してみましょう。以下のように入力するとファイル名が変更されます。bash,zsh,PowerShellでも動作します。

mv 1.txt 2.txt

ここで、すでに2.txtファイルがある場合、2.txtファイルがなくなり、代わりに1.txtファイルが2.txtとなります。つまり上書きされることになります。おまけにオプションを指定していないと警告もなしにバッサリと上書きされます。

さすがにそれは怖い(困る)という場合はiまたはnオプションを指定しておくとよいでしょう(Windows版PowerShellは除く)。iオプションを指定すると確認のメッセージが表示されるようになります。上書きする場合はyキーを押してからリターンキーを押します。上書きしたくない場合はnキーを押してからリターンキーを押します。

mv -i 1.txt 2.txt

Windows版のPowerShellではiオプションではなくConfirmオプションを指定すると確認のメッセージが表示されるようになります。

Move-Item -Confirm 1.txt 2.txt

常に上書きしない、と言うのであればnオプションを指定しておけばOKです(Windows版PowerShellを除く)。ただ、ファイル名が変更できなかった場合でも何もエラーメッセージ等は出力されません。逆に強制的に上書きするならfオプションを指定します。複数のファイルを移動させたりする場合には、このようなオプションを指定しておかないと期待通りの動作にならないことがあります。
また、自動処理を行う場合や環境による動作の違いも考慮するなら、このようなオプションは明示しておいた方が安全です。なお、mvコマンドのオプションは環境によって使えるものと使えないものがあります。Linuxだと結構多くのオプションが使えますが、Macの場合はあまりオプションがありません。

mv -n 1.txt 2.txt