そんな場面、Linuxの現場ではよくある話です。
ログや設定ファイルは残しても、「どんなファイルがあったか」という証跡は意外と取り忘れます。
再現できない、説明できない、確認できない。あとで困るのは自分です。
この記事では、
tree コマンドと ls コマンドを使ってディレクトリ構造・ファイル一覧をテキストファイルとして保存する方法を解説します。コマンドの出力をリダイレクトでファイルに書き込む基本から、日時付きファイル名での自動保存まで、実務で即使えるパターンを網羅します。
この記事のポイント
・tree コマンドでディレクトリ構造を階層表示しテキスト保存できる
・ls -laR でサブディレクトリも含む全ファイル一覧を出力できる
・リダイレクトとdateコマンドを組み合わせて日時付きログが作れる
・作業前後の証跡をdiffで比較すると変更点を即座に特定できる
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
なぜファイル一覧を証跡として残すのか
サーバー作業では「何をしたか」のコマンド履歴だけでなく、「何があったか」というファイル構成の記録が後工程で重要になります。たとえば、次のような場面です。
・デプロイ前後でどのファイルが変わったかを確認したい
・別の担当者に引き継ぐ前に現在の構成を文書化したい
・障害発生時に「変更前の状態」を参照したい
・監査対応でディレクトリ構造の証跡を残す必要がある
history コマンドでコマンド履歴は残りますが、ファイル構成の「スナップショット」は別途取得しなければなりません。これを手軽に実現するのが
tree と ls の出力保存です。treeコマンドとは
tree はディレクトリ構造を木構造(ツリー形式)で表示するコマンドです。標準では含まれていない場合がありますが、パッケージマネージャーで簡単にインストールできます。
出力例はこのようになります。
/var/www/html ├── index.html ├── css │ ├── style.css │ └── reset.css ├── js │ └── app.js └── img ├── logo.png └── banner.jpg 3 directories, 6 files
treeコマンドのインストール
1. RHEL系(Rocky Linux / AlmaLinux / RHEL 9)
# treeをインストール sudo dnf install -y tree # バージョン確認 tree --version
2. Debian系(Ubuntu 24.04 LTS)
# treeをインストール sudo apt install -y tree # バージョン確認 tree --version
treeコマンドの基本的な使い方
1. カレントディレクトリのツリー表示
# カレントディレクトリのツリーを表示 tree # 指定ディレクトリのツリーを表示 tree /var/www/html
2. よく使うオプション
・-a:隠しファイル(ドットファイル)も含めて表示・-L 階層数:表示する深さを制限する(例:-L 2 で2階層まで)
・-d:ディレクトリのみを表示(ファイルは非表示)
・-s:各ファイルのサイズを表示
・-h:ファイルサイズを人間が読みやすい形式で表示(KB、MBなど)
・-p:パーミッション情報を表示
・-u:ファイル所有者を表示
・-I パターン:パターンに一致するファイルを除外(例:-I "*.log")
実際のサーバーで以下のように実行すると、作業に必要な情報がまとまって確認できます。
# パーミッション・所有者・サイズを含めた詳細表示(2階層まで) tree -L 2 -phus /var/www/html # 出力例(検証サーバーでの実行結果) /var/www/html ├── [drwxr-xr-x www-data www-data 60] css │ ├── [-rw-r--r-- www-data www-data 2.4K] reset.css │ └── [-rw-r--r-- www-data www-data 8.1K] style.css └── [-rw-r--r-- www-data www-data 1.2K] index.html 1 directory, 3 files
ファイル一覧をテキストファイルとして保存する
1. 基本のリダイレクト保存
tree コマンドの出力をリダイレクトするだけで、テキストファイルに保存できます。# ホームディレクトリに保存 tree /var/www/html > ~/filelist.txt # 確認 cat ~/filelist.txt
2. 日時付きファイル名で保存(作業証跡として有効)
作業ごとに証跡を残したい場合は、date コマンドと組み合わせて日時付きファイル名で保存します。# 日時付きファイル名で保存(例:filelist_20260615_1430.txt) tree /var/www/html > ~/filelist_$(date +%Y%m%d_%H%M).txt # 保存されたファイルを確認 ls -la ~/filelist_*.txt
3. 詳細情報付きで保存(パーミッション・サイズ含む)
# パーミッション・所有者・サイズ込みで保存 tree -phus /etc/nginx > ~/nginx_filelist_$(date +%Y%m%d).txt # treeがない場合はls -laRでも代替可能 ls -laR /etc/nginx > ~/nginx_filelist_$(date +%Y%m%d).txt
lsコマンドでファイル一覧を保存する
tree コマンドがインストールできない環境や、ls の出力形式が必要な場合の方法です。1. ls -laR でサブディレクトリも含めて出力
-R(再帰)オプションを使うとサブディレクトリも含む全ファイル一覧を出力できます。# 再帰的にファイル一覧を保存 ls -laR /var/www/html > ~/ls_filelist.txt # 先頭部分を確認 head -30 ~/ls_filelist.txt
2. findコマンドで完全なパス一覧を出力
ファイルのフルパスを一覧化したい場合はfind コマンドが適しています。# フルパスでファイル一覧を出力 find /var/www/html -type f > ~/find_filelist.txt # ディレクトリも含めて出力 find /var/www/html > ~/find_all.txt # タイムスタンプ・サイズ・パーミッション込みで出力 find /var/www/html -ls > ~/find_detail.txt
ls -laR と find コマンドの使い分けはこちらを参考にしてください。→ ls コマンドの基本オプション
作業前後のファイル一覧をdiffで比較する
証跡保存の最大の活用方法は、作業前後の差分確認です。diff コマンドで比較すると、追加・変更・削除されたファイルを即座に特定できます。# 作業前のスナップショットを保存 tree /var/www/html > ~/before_deploy.txt # デプロイ作業を実施(ここで各種作業を行う) # ... # 作業後のスナップショットを保存 tree /var/www/html > ~/after_deploy.txt # 差分を確認(-u でunified diff形式) diff -u ~/before_deploy.txt ~/after_deploy.txt
--- /root/before_deploy.txt 2026-06-15 09:00:00.000000000 +0900 +++ /root/after_deploy.txt 2026-06-15 09:30:00.000000000 +0900 @@ -3,7 +3,8 @@ /var/www/html ├── index.html ├── css -│ └── style.css +│ ├── style.css +│ └── style.min.css ← 追加されたファイルが + で表示 └── js └── app.js
+ で追加されたファイル、- で削除されたファイルが分かります。シェルスクリプトで証跡取得を自動化する
毎回コマンドを手動で実行するのは面倒です。以下のシェルスクリプトで、証跡取得と保存を一発で実行できます。
#!/bin/bash # ファイル一覧証跡取得スクリプト # 使い方: bash save_filelist.sh /対象ディレクトリ /保存先ディレクトリ TARGET_DIR="${1:-/var/www/html}" SAVE_DIR="${2:-/root/logs/filelist}" DATE_STR=$(date +%Y%m%d_%H%M%S) # 保存先ディレクトリが存在しない場合は作成 mkdir -p "${SAVE_DIR}" SAVE_FILE="${SAVE_DIR}/filelist_${DATE_STR}.txt" # ヘッダー情報を追加 echo "=== ファイル一覧取得 ===" > "${SAVE_FILE}" echo "対象: ${TARGET_DIR}" >> "${SAVE_FILE}" echo "取得日時: $(date '+%Y-%m-%d %H:%M:%S')" >> "${SAVE_FILE}" echo "実行ユーザー: $(whoami)" >> "${SAVE_FILE}" echo "================================" >> "${SAVE_FILE}" # treeが利用できる場合はtreeを使用 if command -v tree &> /dev/null; then tree -phus "${TARGET_DIR}" >> "${SAVE_FILE}" else # treeがない場合はfindで代替 find "${TARGET_DIR}" -ls >> "${SAVE_FILE}" fi echo "証跡を保存しました: ${SAVE_FILE}"
# スクリプトに実行権限を付与 chmod +x save_filelist.sh # 実行(対象ディレクトリと保存先ディレクトリを指定) ./save_filelist.sh /var/www/html /root/logs/filelist # 保存されたファイルを確認 ls -la /root/logs/filelist/
実務でよく使うパターン
1. デプロイ前後の証跡を自動で残す
デプロイスクリプトの冒頭と末尾にtreeコマンドを挿入するだけで、作業前後の証跡が自動的に残ります。#!/bin/bash DEPLOY_DIR="/var/www/html" LOG_DIR="/var/log/deploy" DATE_STR=$(date +%Y%m%d_%H%M) mkdir -p "${LOG_DIR}" # デプロイ前スナップショット tree -phus "${DEPLOY_DIR}" > "${LOG_DIR}/before_${DATE_STR}.txt" # ここでデプロイ処理 rsync -av /tmp/release/ "${DEPLOY_DIR}/" # デプロイ後スナップショット tree -phus "${DEPLOY_DIR}" > "${LOG_DIR}/after_${DATE_STR}.txt" # 差分をログに記録 diff "${LOG_DIR}/before_${DATE_STR}.txt" "${LOG_DIR}/after_${DATE_STR}.txt" \ > "${LOG_DIR}/diff_${DATE_STR}.txt" echo "差分ファイル: ${LOG_DIR}/diff_${DATE_STR}.txt"
2. /etc配下の設定ファイルを定期的に記録する
cron と組み合わせて /etc 配下のファイル構成を週次で記録する例です。→ cron の設定方法は Linux ポート確認の全コマンド と同様にリダイレクトを活用します。
# crontabの設定例(毎週日曜日の深夜1時に/etc配下を記録) 0 1 * * 0 tree -phus /etc > /var/log/etc_snapshot_$(date +\%Y\%m\%d).txt 2>&1
トラブルシュート
treeコマンドでカラーコードが文字化けして保存される
ターミナルの色情報(ANSIエスケープコード)がファイルに書き込まれる場合があります。--noreport オプションではなく、-C の反対である --nocolor(または -n)を使って色情報を除去します。# カラーコードなしで保存(-n でnon-color) tree -n /var/www/html > ~/filelist.txt # または --nocolor を明示 tree --nocolor /var/www/html > ~/filelist.txt
Permission denied でツリーの途中でエラーが出る
アクセス権のないディレクトリを含む場合、途中でエラーが表示されます。エラーメッセージを標準エラー出力として別ファイルに分けるか、
sudo で実行します。# エラーを別ファイルに保存 tree /etc > ~/etc_filelist.txt 2> ~/etc_errors.txt # rootとして実行 sudo tree /etc > ~/etc_filelist.txt
日本語のファイル名が文字化けする
ロケール設定が合っていない場合、日本語ファイル名が化けることがあります。# ロケールを指定して実行 LANG=ja_JP.UTF-8 tree /対象ディレクトリ > ~/filelist.txt # または tree に --charset=UTF-8 を指定 tree --charset=UTF-8 /対象ディレクトリ > ~/filelist.txt
本記事のまとめ
tree と ls の出力をリダイレクトでファイル保存する方法を解説しました。| やりたいこと | コマンド |
|---|---|
| ツリー形式で保存 | tree /対象ディレクトリ > filelist.txt |
| 日時付きファイル名で保存 | tree /対象 > filelist_$(date +%Y%m%d_%H%M).txt |
| パーミッション・サイズ込みで保存 | tree -phus /対象 > filelist.txt |
| lsで再帰的に保存 | ls -laR /対象 > filelist.txt |
| フルパス一覧で保存 | find /対象 -type f > filelist.txt |
| 作業前後の差分確認 | diff -u before.txt after.txt |
| カラーコードなしで保存 | tree -n /対象 > filelist.txt |
tree コマンドを使いこなすことで、ディレクトリ構造の把握と記録が格段に楽になります。Linuxのリダイレクトについてより詳しく学びたい方は、ls コマンドの基本オプション も参考にしてください。
Linux無料マニュアルを受け取る >>
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 前のページへ:Linuxでファイルパス一覧から各ファイルを別フォルダへ一括移動する方法|while readループの実践
- この記事の属するカテゴリ:Linuxtipsへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます