開發工具

tree-to-file.sh

一個託管在 helper.sh 的 Shell 腳本,適用於 Linux、macOS 與常見 Unix 環境,用來把過濾後的目錄樹匯出到文字檔。它優先使用系統自帶的 tree;若未安裝,會依目前環境嘗試呼叫套件管理器安裝;若安裝仍不可行,則自動回退到內建的 find + awk 方案,但權限或檔案系統錯誤仍可能導致失敗。

先選對輸出,再審閱可能洩漏的名稱

一鍵命令

curl -fL 'https://www.helper.sh/tree-to-file.sh' -o './tree-to-file.sh'

此命令只會下載本站檔案,不會執行。請先檢查儲存的原始碼並核對版本,再決定是否執行。

核對已下載檔案

與本頁面建置時內建的確切位元組比較。檔案僅在目前分頁處理,此工具不上傳、不持久儲存檔案。上限2 MiB。

預期 SHA-256
5abd1198eb756cd94316669022678802d59c1121f221cb879d6255259d47097d

內建檔案位元組數: 2797

儲存校驗檔案

將腳本與校驗檔案儲存在同一目錄。Linux 安裝 GNU Coreutils 後可用下方命令僅檢查位元組,不執行腳本;使用此命令時需保留原檔名。

sha256sum --check './tree-to-file.sh.sha256'

尚未比較。

校驗值與腳本來自同一網站,不是獨立簽章。一致不證明安全、上游相依項目真實可信或適合本機;可變遠端相依項目需單獨審閱。

查看驗證與限制

執行要求

  • Linux、macOS 或常見 Unix Shell 環境
  • sh
  • find
  • sort
  • awk
  • 若需自動安裝 tree,最好具備 sudo 或 root 權限

適用場景

  • 把專案結構匯出到 tree.txt,用於提問、錯誤回報或提供給 AI 作為上下文
  • 跳過 venv、node_modules 等大型目錄,產生更適合分享的目錄概覽
  • 在 Linux 與各類 Unix-like 主機上統一目錄樹匯出方式

腳本亮點

  • 優先使用系統 tree,輸出形式更符合常見習慣
  • 內建 brew、apt、dnf、yum、pacman、zypper、apk、pkg 等常見安裝路徑
  • 無法安裝 tree 時嘗試備援處理;中間錯誤可能留下不完整清單,完成提示不證明成功

推薦流程

  1. 下載腳本,比對位元組並審閱儲存的原始碼,再決定是否執行。
  2. 核對目前掃描目錄、tree是否可用及新的可寫輸出位置。
  3. 若tree缺少,先決定是否允許自動套件變更;腳本沒有禁止安裝的開關。
  4. 經審閱執行後,檢查標準錯誤、已知路徑及輸出的敏感名稱,再決定是否分享。

安全提示

  • 先下載、審閱與比對儲存的腳本,再決定是否執行;遠端內容透過管道送入sh會立即執行。
  • 自動安裝 tree 可能需要 sudo 或 root,並且可能觸發套件索引更新。
  • 內建回退邏輯會以目錄名稱精確忽略,不支援完整 shell glob 語法。

相容範圍與限制

  • 需要 sh;已有 tree 時直接使用,否則可能透過偵測到的套件管理器以 root 或 sudo 自動安裝。它不一定是唯讀盤點;沒有禁止安裝的參數或 dry-run。
  • 第一個參數為輸出檔名(預設 tree.txt),第二個為忽略規則;掃描根目錄是目前工作目錄。輸出檔案會直接覆寫,沒有備份。
  • find 備援需要 find、sort 與 awk;它在遍歷後依路徑組成部分精確比對過濾,tree 則使用自身的 -I 規則。萬用字元行為與輸出格式可能不同。

受影響的檔案、服務與資料

  • 可能重新整理套件中繼資料並安裝 tree,也可能觸發 sudo 提示;套件版本與儲存庫內容沒有固定。
  • 寫入所選輸出檔並包含隱藏項目。備援流程先遍歷忽略的目錄再過濾名稱;忽略規則不是存取控制邊界。

唯讀核驗

  • 執行前以 `command -v tree` 檢查相依工具、以 `pwd` 確認掃描目錄,並檢查輸出檔是否已存在。
  • 經審閱執行後,檢查輸出檔的預期目錄、應排除路徑、缺漏與敏感名稱後再分享。完成提示本身不能證明清單完整。

失敗後的下一步

遇到權限、套件管理器或寫入錯誤時,保留既有輸出並查看錯誤。若不接受自動套件變更,應先透過核准流程個別安裝 tree。確認工作目錄並選擇新的輸出檔名;腳本沒有備份或回復。

先下載、審閱並核對版本,再決定是否執行。雜湊只能識別這一版位元組,不能證明安全。pipe 命令會立即執行遠端內容;上游依賴也可能變動。

先選對輸出,再審閱可能洩漏的名稱

這是原始碼審閱,不是檔案系統掃描或匯出通過的證明。沿用上方既有操作限制,下列實例協助你在執行和分享前判斷。

兩個位置參數的真實含義

掃描根目錄始終是目前工作目錄。第一個參數是輸出檔名,不是來源目錄;第二個是忽略規則。空參數使用預設值(tree.txt和內建忽略清單)。原始碼沒有選項解析,勿把--help或--no-install當作支援的開關;多餘參數不能設定深度或掃描根目錄。

Shell的 > 會在遍歷前建立或截斷輸出,並可能跟隨既有輸出符號連結;處理失敗仍可能留下空白或不完整的取代檔。為避免把輸出本身列入清單,請選掃描樹之外經核實的新位置,父目錄須已存在且可寫。這不會新增備份、防覆寫或不可分割寫入能力。

決定執行前的唯讀檢查

命令僅顯示目前目錄與命令位置,不執行匯出器、不安裝軟體、不驗證權限或證明相容。若沒有tree且不允許套件變更,請停止;腳本沒有禁止安裝的開關。

pwd
command -v tree
command -v find
command -v sort
command -v awk

過濾規則的具體差異

以下是原始碼/文件推導的範例,不是實測輸出。「排除」僅代表不顯示,並非禁止存取;備援分支仍遍歷忽略目錄。tree版本可能不同,請核對已安裝版本手冊。

規則 / 範例路徑tree分支find/awk備援分支
node* / node_modules/file.js萬用字元符合,排除名稱字面值node*不等於node_modules,路徑仍保留
.git / .git/config由-I排除路徑組成部分完全相同,因此排除
內建預設規則 / .env不在預設排除清單不在預設排除清單

排除名為.gitignore的檔案不等於讀取其中規則;原始碼未傳入tree --gitignore。即使不匯出檔案內容,隱藏名稱與符號連結目標也可能洩漏私人資訊,分享前請檢查實際儲存的名稱。

為何完成提示不足以判斷成功

備援分支在sh的set -eu下使用find | sort | awk,未設定pipefail。以管道末端狀態為準的Shell中,find/sort報錯後awk仍可能成功並顯示「Wrote」。檔名含換行也會破壞逐行表示。請查看標準錯誤與已知路徑,檔案非空或結束碼0不能單獨證明完整。保留不完整輸出作線索,私下診斷,勿盲目覆寫同一輸出重跑。

tree上游手冊 · GNU Bash · 查看匯出審閱驗證與限制

相關專題

CentOS 7:選擇復原工作

變更已結束支援的主機前,先區分軟體庫故障、SSH 存取問題與 Docker 儲存壓力。

查看專題