「いくつもある不要なディレクトリを、一つ一つ削除するのは面倒…」
Linuxを使っていると、テストで作ったディレクトリや古いデータをまとめて削除したくなることがありますよね。
そんなときに便利なのが、rm
コマンドを使った複数ディレクトリの一括削除です。
ただし使い方を間違えると、必要なデータまで一気に消してしまう危険もあります。
この記事では:
- Linuxでディレクトリを削除する基本的なコマンド
- 複数のディレクトリを効率的に一括削除する方法
- 安全に削除するための事前確認とオプション
- 削除失敗やデータ復旧に関する対策
を解説します。これを読めば、安全で効率的なディレクトリ管理ができるようになります。
ディレクトリ削除の基本概念

Linuxにおけるディレクトリとファイルの違い
ディレクトリ(Directory)
- ファイルを格納する「入れ物」
- Windowsでいうフォルダと同じ概念
- 階層構造を持ち、中に子ディレクトリやファイルを含む
削除の特殊性
- 空のディレクトリ:
rmdir
コマンドで削除可能 - 中身があるディレクトリ:
rm -r
(再帰削除)が必要 - Linuxには「ゴミ箱」概念がないため、削除は即座に実行される
rmコマンドの基本構文
rm [オプション] ディレクトリ名・ファイル名
主要オプション
-r
(recursive):ディレクトリを再帰的に削除-f
(force):確認なしで強制削除-i
(interactive):削除前に確認を求める-v
(verbose):削除過程を表示
基本的なディレクトリ削除方法

空のディレクトリの削除
rmdir
コマンドの使用
rmdir empty_directory
特徴
- 空のディレクトリのみ削除可能
- 中身がある場合はエラーで停止
- 安全性が高い
複数の空ディレクトリを削除
rmdir dir1 dir2 dir3
中身があるディレクトリの削除
rm -r
の基本使用
rm -r directory_name
動作説明
- ディレクトリ内のファイルを削除
- サブディレクトリがあれば再帰的に処理
- 最後にディレクトリ自体を削除
削除過程の確認
rm -rv directory_name
出力例
removed 'test_dir/file1.txt'
removed 'test_dir/subdir/file2.txt'
removed directory 'test_dir/subdir'
removed directory 'test_dir'
複数ディレクトリの一括削除方法
方法1:複数の名前を直接指定
基本的な指定方法
rm -r dir1 dir2 dir3
より多くのディレクトリを指定
rm -r project1 project2 project3 backup old_data temp_files
スペースを含む名前の処理
rm -r "Project Files" "Old Data" "Temp Directory"
または
rm -r Project\ Files Old\ Data Temp\ Directory
方法2:ワイルドカードパターンの活用
基本的なワイルドカード
アスタリスク(*)の使用
# testで始まるすべてのディレクトリ
rm -r test*
# 特定の拡張子で終わるディレクトリ
rm -r *_backup
# 特定の文字を含むディレクトリ
rm -r *temp*
クエスチョンマーク(?)の使用
# 1文字の違いがあるディレクトリ
rm -r dir? # dir1, dir2, dira, dirb など
# より複雑なパターン
rm -r test_?? # test_01, test_02 など
高度なパターンマッチング
角括弧([])での文字範囲指定
# 数字で終わるディレクトリ
rm -r dir[0-9]
# 特定の文字で終わるディレクトリ
rm -r project[abc]
# 数字の範囲指定
rm -r test[1-5]
波括弧({})での複数パターン
# 複数の拡張子パターン
rm -r *.{tmp,bak,old}
# 複数の接頭辞
rm -r {test,demo,temp}_*
方法3:findコマンドとの組み合わせ
条件に基づく削除
名前パターンでの検索と削除
find . -type d -name "test*" -exec rm -r {} +
更新日時での条件指定
# 30日より古いディレクトリを削除
find . -type d -mtime +30 -exec rm -r {} +
サイズでの条件指定
# 空のディレクトリのみ削除
find . -type d -empty -delete
より安全なfind
の使用法
削除前に対象を確認
# まず対象を表示
find . -type d -name "temp*"
# 確認後に削除実行
find . -type d -name "temp*" -exec rm -r {} +
安全な削除のための事前確認

削除対象の事前確認方法
ls
コマンドでの確認
基本的な確認
# ワイルドカードの展開結果を確認
ls -d test*
詳細情報付きの確認
# ディレクトリの詳細情報を表示
ls -ld test*
出力例
drwxr-xr-x 2 user user 4096 Jul 2 10:30 test1
drwxr-xr-x 3 user user 4096 Jul 2 10:31 test2
drwxr-xr-x 2 user user 4096 Jul 2 10:32 test_backup
tree
コマンドでの構造確認
ディレクトリ構造の表示
tree test*
出力例
test1
├── file1.txt
└── file2.txt
test2
├── subdir
│ └── data.txt
└── config.txt
test_backup
└── backup.tar.gz
du
コマンドでのサイズ確認
ディレクトリサイズの確認
du -sh test*
出力例
1.2M test1
856K test2
3.4M test_backup
対話的削除オプション
-i
オプションの活用
基本的な使用
rm -ri test*
動作例
rm: remove directory 'test1'? y
rm: remove directory 'test2'? y
rm: remove directory 'test_backup'? n
カスタム確認スクリプト
より詳細な確認を行うスクリプト
#!/bin/bash
for dir in test*; do
if [ -d "$dir" ]; then
echo "Directory: $dir"
echo "Size: $(du -sh "$dir" | cut -f1)"
echo "Files: $(find "$dir" -type f | wc -l)"
read -p "Delete this directory? (y/n): " answer
if [ "$answer" = "y" ]; then
rm -r "$dir"
echo "Deleted: $dir"
else
echo "Skipped: $dir"
fi
echo "---"
fi
done
エラー処理と安全対策

削除時によくあるエラー
権限エラーの対処
エラー例
rm: cannot remove 'protected_dir': Permission denied
対処法
# 権限を確認
ls -ld protected_dir
# 権限を変更してから削除
chmod -R 755 protected_dir
rm -r protected_dir
# 管理者権限で削除
sudo rm -r protected_dir
ファイルが使用中の場合
エラー例
rm: cannot remove 'busy_dir/file.txt': Device or resource busy
対処法
# ファイルを使用しているプロセスを確認
lsof +D busy_dir
# プロセスを終了してから削除
kill -9 <プロセスID>
rm -r busy_dir
バックアップとリスク管理
削除前のバックアップ作成
重要なディレクトリのバックアップ
# tar.gzでのバックアップ
tar -czf backup_$(date +%Y%m%d_%H%M%S).tar.gz important_dir
# 別の場所へのコピー
cp -r important_dir /backup/location/
# rsyncでのバックアップ
rsync -av important_dir/ /backup/location/important_dir/
段階的削除の実践
テスト環境での事前確認
# 1. まず1つのディレクトリで試す
rm -r test1
# 2. 問題がなければ複数実行
rm -r test2 test3
# 3. 最後にワイルドカードを使用
rm -r test*
高度な削除テクニック

条件付き削除の実装
日付条件での削除
特定期間より古いディレクトリを削除
# 7日より古いディレクトリ
find . -maxdepth 1 -type d -mtime +7 -not -name "." -exec rm -r {} +
# 特定日付より前のディレクトリ
find . -maxdepth 1 -type d -not -newermt "2024-01-01" -not -name "." -exec rm -r {} +
サイズ条件での削除
特定サイズ以上のディレクトリを削除
# 1GB以上のディレクトリを見つけて削除
find . -maxdepth 1 -type d -exec du -s {} + | awk '$1 > 1048576 {print $2}' | xargs rm -r
内容に基づく削除
空のディレクトリのみを削除
find . -type d -empty -delete
特定のファイルを含まないディレクトリを削除
find . -maxdepth 1 -type d ! -name "." ! -exec test -e {}/important.txt \; -print0 | xargs -0 rm -r
並列処理による高速化
xargs
での並列削除
基本的な並列処理
echo "dir1 dir2 dir3 dir4" | xargs -n 1 -P 4 rm -r
find
と組み合わせた並列処理
find . -maxdepth 1 -type d -name "temp*" -print0 | xargs -0 -n 1 -P 4 rm -r
GNU parallel
での高速処理
parallel
のインストールと使用
# インストール(Ubuntu/Debian)
sudo apt install parallel
# 使用例
ls -d temp* | parallel rm -r {}
削除の代替手段

ゴミ箱機能の実装
trash-cli
の使用
インストール
# Ubuntu/Debian
sudo apt install trash-cli
# CentOS/RHEL
sudo yum install trash-cli
使用方法
# ディレクトリをゴミ箱に移動
trash dir1 dir2 dir3
# ゴミ箱の内容を確認
trash-list
# ゴミ箱から復元
trash-restore
# ゴミ箱を空にする
trash-empty
カスタムゴミ箱スクリプト
シンプルなゴミ箱機能
#!/bin/bash
TRASH_DIR="$HOME/.trash"
mkdir -p "$TRASH_DIR"
safe_remove() {
for item in "$@"; do
if [ -e "$item" ]; then
mv "$item" "$TRASH_DIR/$(basename "$item")_$(date +%Y%m%d_%H%M%S)"
echo "Moved to trash: $item"
fi
done
}
# 使用例
safe_remove dir1 dir2 dir3
移動による「削除」
一時的な隔離
隔離ディレクトリの作成と使用
# 隔離用ディレクトリの作成
mkdir -p /tmp/quarantine
# ディレクトリを隔離
mv unwanted_dir1 unwanted_dir2 /tmp/quarantine/
# 後で確認して完全削除
ls /tmp/quarantine/
rm -r /tmp/quarantine/*
トラブルシューティング

よくある問題と解決法
問題1:削除が途中で止まる
原因
- 権限不足
- ファイルシステムエラー
- ディスク容量不足
対処法
# 権限の確認と修正
sudo chmod -R 755 problem_dir
sudo chown -R $USER:$USER problem_dir
# ファイルシステムのチェック
sudo fsck /dev/sdXY
# ディスク容量の確認
df -h
問題2:削除後にディスク容量が減らない
原因
- プロセスがファイルを開いたまま
- シンボリックリンクの問題
対処法
# 削除されたが開かれているファイルの確認
lsof | grep deleted
# プロセスの再起動
sudo systemctl restart サービス名
# システムの再起動(最終手段)
sudo reboot
問題3:必要なファイルまで削除してしまった
予防策
# 削除前のバックアップ
cp -r important_data backup_location
# ドライラン(実際には削除しない)
echo rm -r target* # コマンドを表示するだけ
復旧方法
# ファイルシステムレベルでの復旧ツール
sudo apt install testdisk photorec
sudo photorec
# バックアップからの復元
rsync -av backup_location/ original_location/
ベストプラクティスとまとめ

安全な削除のためのチェックリスト
削除前の確認事項
- 対象の確認:
ls -d
で削除対象を表示 - 内容の確認:
tree
やdu
で構造とサイズを確認 - バックアップ:重要なデータは事前にバックアップ
- 権限の確認:適切な権限で実行しているか確認
- テスト実行:可能であれば小さな範囲でテスト
推奨される削除手順
- 段階的実行:一度に全部ではなく、段階的に削除
- 対話的削除:
-i
オプションで確認しながら実行 - ログ記録:削除内容をログに記録
- 定期的な整理:不要ディレクトリが溜まる前に定期的に整理
コマンド使い分けガイド
用途別推奨コマンド
安全性重視
rm -ri dir1 dir2 dir3 # 対話的削除
trash dir1 dir2 dir3 # ゴミ箱を使用
効率性重視
rm -r dir1 dir2 dir3 # 直接削除
rm -r dir* # ワイルドカード使用
条件付き削除
find . -type d -name "temp*" -exec rm -r {} + # 条件に基づく削除
まとめ
Linuxで複数のディレクトリを削除する方法は多岐にわたりますが、安全性を最優先に考えることが重要です。
重要なポイント
- 事前確認:削除前に必ず対象を確認
- 段階的実行:一度に大量削除せず、段階的に実施
- バックアップ:重要なデータは事前にバックアップ
- 適切なツール選択:用途に応じてコマンドやオプションを選択
基本的な削除方法
rm -r dir1 dir2 dir3
:複数ディレクトリの直接指定rm -r pattern*
:ワイルドカードパターンの活用rm -ri
:対話的な安全削除
高度な削除方法
find
コマンドとの組み合わせ- 条件に基づく削除
- 並列処理による高速化
コメント