mv

mv コマンドはファイル名を変更するときやディレクトリの間を移動するときなどに使われる、ファイル名の変更とディレクトリの移動だと違う機能ではないかと思ってしまうが、ファイル名というのは正確にフルパス表現するとディレクトリ名も入ってくるそう考えると腑に落ちてもらえると思う。

ファイルを上書きして良い場合というのは限定的な場合なので基本的に上書きを禁止するような使い方が安全だ。

共通

mv が使える状態か確認

which mv

バージョン確認

mv --version

注意したいのは Mac と Linux(Ubuntu) とではオプションの付け方が若干ことなる。ここでは両方でうごくようなオプションの書き方を紹介

ファイル構造について

下記のようなファイル構造が存在した場合

tree ~/tmp/mvtest
├── animal
│   ├── cat.jpg
│   └── mushroom.jpg
├── flower.jpg
├── img
│   ├── bird.jpeg
│   ├── cabbage.jpg
│   ├── dog.jpg
│   ├── horse.jpeg
│   └── sunflower.jpeg
├── jpegdir
├── jpgdir
└── plant
    └── rice.jpg

サンプルの再現

下記のコマンドをつかうと上記のようなファイル構造がつくれますよ。

mkdir -p ~/tmp/mvtest && \
cd ~/tmp/mvtest && \
mkdir animal plant img jpgdir jpegdir && \
touch flower.jpg && \
touch plant/rice.jpg && \
touch animal/cat.jpg animal/mushroom.jpg && \
cd img && \
touch bird.jpeg dog.jpg horse.jpeg sunflower.jpeg cabbage.jpg

下記のディレクトリに移動している過程で

cd ~/tmp/mvtest

ファイル名の変更

flower.jpg を rose.jpg に変更したい場合

mv -n flower.jpg rose.jpg

ディレクトリの移動

animal ディレクトリの mushroom.jpg を plant ディレクトリに移動

mv -n animal/mushroom.jpg plant

ディレクトリの移動組み合わせ

img ディレクトリの 拡張子 jpeg のファイルを jpegdir へ移動、拡張子 jpg のファイルを jpgdir へ移動

mv -n img/*.jpeg jpegdir && \
mv -n img/*.jpg jpgdir

複数ファイルの名前同時変更は mv コマンドのみでは難しいので rename コマンドというものもあります。2021年10月現在では Mac では rename コマンドは入っていないようです。

ディレクトリ名の変更

ファイルと同様ディレクトリ名の変更もできるがディレクトリ内にファイルが存在する場合は そのファイルもフルパスでいくとファイル名が変更になるので注意

animal ディレクトリ名を animal-img という名前に変更

mv -n animal animal-img