はじめに

こんにちは!今回はmvコマンドについて解説します。

mvはファイルを移動したり名前を変更したりするコマンドです。コマンドライン版の「切り取り&貼り付け」や「名前の変更」って感じですね。

超シンプルですが、めっちゃ使います。

mvコマンドとは

mvは、ファイルやディレクトリを移動または名前変更する外部コマンドです。“move"の略ですね。

cpと違って、元のファイルは残りません。同じディレクトリ内で名前を変えるのが「名前変更」、別のディレクトリに移すのが「移動」です。

基本構文

1
mv [オプション] 移動元 移動先

主なオプション

オプション 説明
-i 上書き前に確認(interactive)
-f 強制的に上書き(force)
-n 既存ファイルを上書きしない
-v 詳細表示(verbose)
-u 新しいファイルのみ移動(update)
-b 上書き前にバックアップを作成
-t 移動先ディレクトリを先に指定

使用例

例1: ファイルの名前を変更

1
mv oldname.txt newname.txt

実行結果:

1
(成功時は何も表示されない)

oldname.txtnewname.txtに名前変更します。最も基本的な使い方です。

例2: ファイルを別ディレクトリに移動

1
mv file.txt /home/user/documents/

実行結果:

1
(成功時は何も表示されない)

file.txt/home/user/documents/ディレクトリに移動します。

例3: 移動と名前変更を同時に

1
mv file.txt /backup/file_backup.txt

実行結果:

1
(成功時は何も表示されない)

file.txt/backup/に移動して、同時にfile_backup.txtに名前変更します。

例4: 複数ファイルを一度に移動

1
mv file1.txt file2.txt file3.txt /documents/

実行結果:

1
(成功時は何も表示されない)

3つのファイルを/documents/ディレクトリに移動します。最後の引数が移動先になります。

例5: ディレクトリを移動

1
mv folder1 /backup/

実行結果:

1
(成功時は何も表示されない)

folder1ディレクトリを/backup/に移動します。cpと違って-rオプションは不要です。

例6: ディレクトリの名前を変更

1
mv old_folder new_folder

実行結果:

1
(成功時は何も表示されない)

old_foldernew_folderに名前変更します。

例7: 確認付きで移動(-i)

1
mv -i source.txt destination.txt

実行結果:

1
mv: overwrite 'destination.txt'?

destination.txtが存在する場合、確認してくれます。上書きする場合はy、キャンセルする場合はnを押します。

例8: 詳細表示(-v)

1
mv -v file1.txt file2.txt /documents/

実行結果:

1
2
'file1.txt' -> '/documents/file1.txt'
'file2.txt' -> '/documents/file2.txt'

どのファイルを移動したか表示してくれます。

例9: ワイルドカードを使った移動

1
mv *.txt /documents/

実行結果:

1
(成功時は何も表示されない)

すべての.txtファイルをdocumentsディレクトリに移動します。

例10: バックアップ付きで上書き(-b)

1
mv -b newfile.txt oldfile.txt

実行結果:

1
2
3
(成功時は何も表示されない)
ls
newfile.txt  oldfile.txt~

oldfile.txtが存在する場合、oldfile.txt~としてバックアップを作成してから上書きします。

例11: -tオプションで複数ファイルを移動

1
mv -t /destination/ file1.txt file2.txt file3.txt

実行結果:

1
(成功時は何も表示されない)

-tで移動先を先に指定できます。スクリプトで便利ですね。

例12: 上書きしない(-n)

1
mv -n source.txt destination.txt

実行結果:

1
(成功時は何も表示されない)

destination.txtが存在する場合、上書きせずにスキップします。

Tips・注意点

-iオプションで安全に

誤って大事なファイルを上書きしないよう、-iを使いましょう。

1
mv -i source.txt destination.txt

重要なファイルを扱う時は必須です。

cpとの違い

1
2
3
4
5
6
7
# cp: 元のファイルが残る
cp file.txt /backup/
ls file.txt  # まだ存在する

# mv: 元のファイルは消える
mv file.txt /backup/
ls file.txt  # 存在しない(移動したから)

mvは移動なので、元のファイルは消えます。

ディレクトリには-r不要

1
2
3
4
5
# cpには-rが必要
cp -r folder /backup/

# mvには-r不要
mv folder /backup/

mvはディレクトリをそのまま移動できます。

同じディレクトリ内での移動

1
2
3
4
5
# 現在のディレクトリで名前変更
mv oldname.txt newname.txt

# 相対パスで移動
mv file.txt ./subfolder/

移動先の存在確認

1
2
3
# ディレクトリを先に作成しておくとエラー回避
mkdir -p /backup
mv file.txt /backup/

エイリアスの設定

1
2
# ~/.bashrcに追加
alias mv='mv -i'

常に確認付きで移動できます。

ファイル名の大文字小文字変更

1
2
3
4
5
6
7
# Linux: 大文字小文字を区別するので直接変更OK
mv file.txt FILE.TXT

# macOS(大文字小文字を区別しないファイルシステム)
# 中間ステップが必要
mv file.txt temp.txt
mv temp.txt FILE.TXT

実践的な使い方

プロジェクトファイルの整理

1
2
3
4
5
# テストファイルをtestsディレクトリに移動
mv *_test.py tests/

# 古いファイルをアーカイブに移動
mv old_*.txt archive/

ログファイルのローテーション

1
2
3
4
# 現在のログを日付付きでアーカイブ
mv app.log app_$(date +%Y%m%d).log

# 新しいログファイルが自動的に作成される

一括リネーム

1
2
3
4
5
6
7
8
9
# 拡張子を変更
for file in *.txt; do
    mv "$file" "${file%.txt}.md"
done

# プレフィックスを追加
for file in *.jpg; do
    mv "$file" "photo_$file"
done

バックアップファイルの管理

1
2
3
4
# 日付付きバックアップディレクトリに移動
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
mv old_project "$BACKUP_DIR/"

ダウンロードフォルダの整理

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
#!/bin/bash
# ダウンロードフォルダを整理

# 画像
mv ~/Downloads/*.{jpg,png,gif} ~/Pictures/ 2>/dev/null

# ドキュメント
mv ~/Downloads/*.{pdf,doc,docx} ~/Documents/ 2>/dev/null

# 動画
mv ~/Downloads/*.{mp4,avi,mkv} ~/Videos/ 2>/dev/null

設定ファイルの切り替え

1
2
3
4
5
# 新しい設定を適用
mv config.new config.yml

# バックアップ付きで上書き
mv -b config.new config.yml  # config.yml~が作られる

スクリプト内での安全な移動

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
set -e

SOURCE="file.txt"
DEST="/backup/file.txt"

if [ -e "$SOURCE" ]; then
    if [ -e "$DEST" ]; then
        echo "警告: $DEST は既に存在します"
        read -p "上書きしますか? (y/n) " -n 1 -r
        echo
        if [[ $REPLY =~ ^[Yy]$ ]]; then
            mv "$SOURCE" "$DEST"
            echo "移動完了"
        fi
    else
        mv "$SOURCE" "$DEST"
        echo "移動完了"
    fi
else
    echo "エラー: $SOURCE が存在しません" >&2
    exit 1
fi

まとめ

mvコマンドのポイント:

  • ファイル・ディレクトリの移動名前変更
  • -i: 上書き前に確認(超重要!)
  • -v: 詳細表示
  • -n: 上書きしない
  • -b: 上書き前にバックアップ
  • ディレクトリには-r不要
  • 元のファイルは残らない(cpと違う)
  • よく使う組み合わせ: mv -i, mv -v

移動と名前変更は基本操作。-iオプションを習慣にすると、大事なファイルを守れますよ!