Linuxでファイル一覧を作業証跡として残す方法|tree・lsの出力をテキスト保存する手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > Linuxでファイル一覧を作業証跡として残す方法|tree・lsの出力をテキスト保存する手順
「作業前後のディレクトリ構造をどこかに残しておきたい」「変更した箇所をあとで確認したい」
そんな場面、Linuxの現場ではよくある話です。

ログや設定ファイルは残しても、「どんなファイルがあったか」という証跡は意外と取り忘れます。
再現できない、説明できない、確認できない。あとで困るのは自分です。

この記事では、tree コマンドと ls コマンドを使ってディレクトリ構造・ファイル一覧をテキストファイルとして保存する方法を解説します。
コマンドの出力をリダイレクトでファイルに書き込む基本から、日時付きファイル名での自動保存まで、実務で即使えるパターンを網羅します。

この記事のポイント

・tree コマンドでディレクトリ構造を階層表示しテキスト保存できる
・ls -laR でサブディレクトリも含む全ファイル一覧を出力できる
・リダイレクトとdateコマンドを組み合わせて日時付きログが作れる
・作業前後の証跡をdiffで比較すると変更点を即座に特定できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

なぜファイル一覧を証跡として残すのか

サーバー作業では「何をしたか」のコマンド履歴だけでなく、「何があったか」というファイル構成の記録が後工程で重要になります。

たとえば、次のような場面です。

・デプロイ前後でどのファイルが変わったかを確認したい
・別の担当者に引き継ぐ前に現在の構成を文書化したい
・障害発生時に「変更前の状態」を参照したい
・監査対応でディレクトリ構造の証跡を残す必要がある

history コマンドでコマンド履歴は残りますが、ファイル構成の「スナップショット」は別途取得しなければなりません。
これを手軽に実現するのが treels の出力保存です。

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

動作確認済み環境: RHEL 9.4 / Rocky Linux 9.4 / Ubuntu 24.04 LTS

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 -laRfind コマンドの使い分けはこちらを参考にしてください。
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

本記事のまとめ

treels の出力をリダイレクトでファイル保存する方法を解説しました。
やりたいこと コマンド
ツリー形式で保存 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サーバー構築の「型」を体系的に身につけたい方へ、20年以上の運用経験を持つ現役エンジニアが基礎から教えます。
Linux無料マニュアルを受け取る >>

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。