Perintah tree Linux: struktur direktori, filter, dan laporan
tree adalah perintah yang menampilkan struktur hirarki direktori dan file dalam format pohon yang diberi inden. Ini berguna untuk menelusuri seluruh direktori saat ini atau membatasi kedalaman keluaran dan memilih file tertentu untuk memeriksa struktur proyek.
Ini menjelaskan metode yang sering digunakan, mulai dari instalasi dasar hingga menampilkan file tersembunyi, pola pengecualian, memeriksa ukuran dan izin file, serta menyimpan teks atau JSON. Contohnya didasarkan pada tree untuk Unix/Linux.
Apa itu perintah tree?
tree menjelajahi direktori yang ditentukan secara rekursif dan mencetak hubungan antara file dan subdirektori dengan inden sesuai kedalaman. Jika tidak ada direktori yang ditentukan, ia menargetkan direktori saat ini ..
Untuk menyiapkan contoh yang aman, blok berikut membuat direktori uji unik beserta tiga subdirektori dan lima file kosong. tree harus sudah terpasang. Pemanggilan dalam subshell mempertahankan lokasi shell induk; path direktori uji dicetak agar dapat dipakai pada contoh selanjutnya.
tree_demo=$(mktemp -d) || exit 1
mkdir -p -- "$tree_demo/config" "$tree_demo/public" "$tree_demo/src" || exit 1
touch -- "$tree_demo/README.md" "$tree_demo/config/app.conf" \
"$tree_demo/public/index.html" "$tree_demo/src/main.py" "$tree_demo/src/utils.py" || exit 1
printf 'Direktori uji: %s\n' "$tree_demo"
(cd -- "$tree_demo" && tree)
Misalnya, Anda dapat melihat struktur berikut sekilas.
.
├── README.md
├── config
│ └── app.conf
├── public
│ └── index.html
└── src
├── main.py
└── utils.py
3 directories, 5 files
Sementara ls juga menampilkan daftar file, pada dasarnya ini cocok untuk memeriksa item dalam satu direktori. tree lebih nyaman untuk memahami secara visual beberapa tingkat penyertaan.
Menginstal tree
tree bukan perintah bawaan shell dan mungkin tidak diinstal secara default tergantung pada distribusi. Pertama, periksa apakah perintah ini sudah terinstal dengan perintah berikut.
tree --version
Debian dan Ubuntu
sudo apt update
sudo apt install tree
Rocky Linux, AlmaLinux, RHEL, dan Fedora
sudo dnf install tree
Pada distribusi lama yang menggunakan yum alih-alih dnf, Anda dapat menggunakan sudo yum install tree. Paket harus tersedia di repository yang diaktifkan agar dapat diinstal.
Arch Linux
sudo pacman -S tree
Sintaks dan Penggunaan Dasar
tree [opsi] [direktori ...]
Untuk mencetak direktori saat ini, jalankan tanpa argumen apa pun, dan untuk memeriksa lokasi lain, tentukan jalurnya. Anda juga dapat menentukan beberapa direktori sekaligus.
tree
tree /etc/nginx
tree ~/projects/app
tree src tests
Jalur dengan spasi harus diapit dengan tanda kutip agar diteruskan sebagai satu argumen.
tree "Project Files"
Ringkasan akhir menghitung item dalam cakupan keluaran; filter, kedalaman, dan izin dapat mengubah jumlahnya. Contoh jalur seperti /etc/nginx atau tests mengasumsikan direktori itu ada. Ganti dengan direktori uji yang dicetak tadi bila ingin mengikuti latihan yang sama. Gunakan --noreport untuk menyembunyikan ringkasan.
tree --noreport
Tentukan direktori target dan kedalaman keluaran
Lihat struktur direktori tertentu
Anda dapat menentukan direktori yang akan diperiksa sebagai argumen tanpa mengubah lokasi saat ini.
tree /var/www
tree ./src
Menentukan jalur memisahkan lokasi eksekusi perintah dan target output, sehingga lebih mudah untuk memahami maksudnya bahkan dalam otomatisasi.
Batasi kedalaman maksimum dengan -L
Untuk proyek besar atau direktori sistem, menampilkan semuanya dapat menghasilkan output yang terlalu panjang. Tentukan kedalaman maksimum yang ingin ditampilkan setelah -L.
tree -L 1
tree -L 2 /var/www
tree -L 3 ~/projects/app
tree -L 2 hanya menampilkan hingga dua tingkat dari titik awal. Saat berbagi struktur direktori, sebaiknya batasi kedalaman terlebih dahulu agar hanya jangkauan yang diperlukan yang terlihat.
Menyertakan file tersembunyi atau menampilkan hanya direktori
Sertakan file tersembunyi dengan -a
Secara default, file dan direktori tersembunyi yang namanya diawali dengan titik tidak termasuk dalam output. Menggunakan -a juga akan menampilkan item seperti .env dan .gitignore.
tree -a
tree -a -L 2
Saat membagikan nama file konfigurasi atau struktur direktori ke pihak luar, pastikan tidak ada informasi sensitif yang terbuka. -a menampilkan nama, bukan isinya, tetapi nama itu sendiri bisa sensitif.
Tampilkan hanya direktori dengan -d
Untuk memeriksa hanya struktur folder tanpa file, gunakan -d.
tree -d
tree -d -L 3 /var/www
Ini berguna ketika dengan cepat menjelaskan komposisi modul dari sebuah proyek atau tata letak direktori backup.
Sertakan atau kecualikan berdasarkan nama file
Aman untuk menempatkan pola -P dan -I dalam tanda kutip tunggal agar shell tidak memperluasnya terlebih dahulu. Beberapa pola dapat dipisahkan dengan tanda vertikal |.
Tampilkan hanya file yang cocok dengan -P
-P memilih hanya file yang cocok dengan pola wildcard.
tree -P '*.py'
tree -P '*.jpg|*.png|*.webp'
Untuk menghapus bahkan direktori yang tampak kosong setelah difilter, gunakan --prune bersamaan.
tree -P '*.py' --prune
Untuk menyertakan file tersembunyi dalam pemeriksaan pola, Anda juga perlu -a.
Mengecualikan item yang tidak perlu dengan -I
-I mengecualikan file dan direktori yang sesuai pola dari output. Menyembunyikan dependensi, hasil build, dan direktori cache membuat struktur proyek jauh lebih sederhana.
tree -I 'node_modules|.git|dist|__pycache__'
tree -L 3 -I '*.log|tmp|cache'
-I hanya mengecualikan file dari tampilan, tanpa menghapusnya.
Menggunakan aturan Git ignore dengan --gitignore
Di versi yang didukung, --gitignore memungkinkan Anda menggunakan aturan dari .gitignore dan file Git exclude dalam filter.
tree --gitignore
tree -a --gitignore -L 3
Periksa apakah versi yang Anda pasang mendukung opsi ini dengan tree --help. Bahkan saat menggunakan --gitignore, Anda harus meninjau output secara manual sebelum membagikan struktur repositori secara eksternal.
Jangan menganggap hasilnya selalu identik dengan daftar file yang dilacak atau diabaikan Git; tree menerapkan aturan yang didukung implementasinya pada penelusuran direktori.
Menampilkan ukuran, izin, dan waktu modifikasi
Melihat Ukuran File dan Ukuran Kumulatif Direktori
-s menampilkan ukuran logis dalam byte; -h menampilkannya dengan satuan ringkas. Ukuran direktori sendiri bukan jumlah seluruh isi. Alokasi disk fisik dapat berbeda dari ukuran logis, jadi jangan menganggap angka ini sama dengan penggunaan disk dari du.
tree -s
tree -h
--du menghitung ukuran kumulatif dari file dan subdirektori yang ada di setiap direktori. Jika Anda ingin format yang mudah dibaca manusia, gunakan -h bersamaan.
tree --du -h -L 2
--du perlu mengumpulkan pohon yang ditelusuri sebelum menghasilkan laporan dan dapat memakai banyak memori. Batas kedalaman, filter, tautan, dan kesalahan izin membatasi data yang terkumpul; angka tersebut bukan audit seluruh disk atau jaminan total lengkap di luar cakupan penelusuran.
Melihat Izin, Pemilik, dan Waktu
-p menunjukkan izin, -u menunjukkan pemilik, dan -g menunjukkan grup. Menambahkan -D memungkinkan Anda juga melihat waktu modifikasi terakhir.
tree -p
tree -pug
tree -pugD -L 2
Saat menyelidiki masalah izin, Anda dapat melihat baik struktur maupun metadata, tetapi jika nama pengguna dan jalurnya sangat panjang, lebar keluaran bisa menjadi lebar.
Mengubah Urutan Pengurutan dan Tampilan Jalur
Tampilkan dan urutkan direktori terlebih dahulu
--dirsfirst menempatkan direktori sebelum file. -t mengurutkan berdasarkan waktu modifikasi, --sort=size mengurutkan berdasarkan ukuran, dan -r membalikkan urutan hasil.
tree --dirsfirst
tree -t
tree --sort=size -r
Untuk menggunakan urutan yang disimpan di sistem file apa adanya dan mengurangi biaya penyortiran, Anda dapat menggunakan -U. Dalam kasus ini, --dirsfirst dinonaktifkan.
Buat jalur lengkap dan daftar ringkas
-f menambahkan prefiks jalur sebelum setiap item; prefiks itu dapat tetap relatif jika operand awal relatif. Gunakan operand absolut bila laporan memerlukan jalur absolut. -i menghapus garis cabang.
tree -f
tree -fi --noreport
Jika Anda memerlukan daftar jalur sederhana untuk dibaca dalam perintah lain, kombinasi -fi --noreport sangat nyaman. Namun, jika nama file mengandung karakter khusus seperti baris baru, penguraian teks sederhana mungkin tidak aman.
Simpan hasil ke file dan format terstruktur
Simpan sebagai file teks
-o mengirim keluaran ke file yang ditentukan dan dapat menimpa file yang sudah ada. Gunakan lokasi laporan baru di luar direktori yang sedang ditelusuri agar laporan tidak ikut tercantum dalam hasilnya sendiri.
tree -L 3 -o directory-structure.txt
tree -a -I '.git|node_modules' --noreport -o project-tree.txt
Pengalihan > oleh shell juga dapat mengosongkan file sebelum tree berjalan, termasuk ketika perintah kemudian gagal. Pastikan nama laporan aman untuk ditimpa. -n mematikan warna agar kode warna tidak tercampur ke file.
tree -n -L 3 > directory-structure.txt
Mengekspor dalam JSON dan XML
-J mengekspor dalam format JSON, dan -X mengekspor dalam format XML. Ini dapat digunakan saat menganalisis atau mengubah struktur dalam program selanjutnya.
tree -J -L 3 > directory-structure.json
tree -X -L 3 > directory-structure.xml
Bidang dan format dapat berbeda menurut versi. Selain memeriksa JSON atau XML valid, periksa status keluar serta pesan kesalahan; laporan yang valid secara sintaks masih dapat memuat penelusuran tidak lengkap akibat filter atau izin.
Menangani tautan simbolik dan batasan sistem file
Memutuskan apakah akan mengikuti tautan simbolik
Secara default, tautan simbolik menampilkan nama tautan dan jalur target, tetapi mereka tidak masuk ke direktori yang mereka tunjuk. Menggunakan -l mengikuti tautan simbolik yang menunjuk ke direktori.
tree -l -L 3
Mengikuti tautan dapat mengeksplorasi lebih banyak jalur dari yang diharapkan, jadi lebih aman menggunakan batas kedalaman bersama-sama. Alat ini menghindari tautan rekursif yang terdeteksi, tetapi Anda perlu memeriksa sendiri jangkauan keluaran dan waktu pemrosesan.
Tetap pada sistem file saat ini dengan -x
-x mencegah berpindah ke sistem file yang berbeda dari direktori awal. Ini berguna untuk membatasi jangkauan eksplorasi di server dengan banyak titik mount.
tree -x -L 3 /
Bahkan saat menargetkan direktori root, jalur tanpa izin tidak dapat dibaca, dan mencetak struktur seluruh sistem dapat menghasilkan hasil yang sangat besar.
Kombinasi perintah tree yang sering digunakan
| Perintah | Tujuan |
|---|---|
tree |
Menampilkan file dan subdirektori dari direktori saat ini sebagai pohon. |
tree -L 2 |
Menampilkan hanya hingga dua level dari lokasi saat ini. |
tree -a |
Termasuk file tersembunyi dan direktori tersembunyi juga. |
tree -d |
Menampilkan hanya direktori, mengecualikan file. |
tree -I 'node_modules|.git' |
Mengecualikan file dan direktori yang cocok dengan pola yang ditentukan. |
tree -P '*.py' --prune |
Menampilkan cabang yang mengandung file Python setelah penyaringan. |
tree -h --du -L 2 |
Menampilkan ukuran kumulatif direktori hingga dua tingkat dalam format yang mudah dibaca. |
tree -pugD |
Menampilkan izin, pengguna, grup, dan waktu modifikasi secara bersamaan. |
tree -fi --noreport |
Menghasilkan daftar jalur lengkap tanpa garis cabang dan ringkasan. |
tree -J -L 3 |
Mengeluarkan struktur hingga tiga tingkat sebagai JSON. |
Ringkasan pilihan utama
| Opsi | Deskripsi |
|---|---|
-a |
Menyertakan file dan direktori tersembunyi yang diawali dengan titik. |
-d |
Menampilkan hanya direktori. |
-L number |
Membatasi kedalaman direktori maksimum yang ditampilkan. |
-P pattern |
Memilih file yang cocok dengan pola wildcard. |
-I pattern |
Mengecualikan file dan direktori yang cocok dengan pola wildcard. |
--prune |
Menghapus direktori kosong dari output setelah menerapkan filter. |
--gitignore |
Menggunakan aturan file yang dikecualikan Git untuk penyaringan. |
-f |
Menampilkan awalan jalur lengkap sebelum setiap nama file. |
-h |
Menampilkan ukuran file dalam satuan yang mudah dibaca. |
--du |
Menghitung ukuran kumulatif per direktori. |
-p |
Menampilkan tipe file dan izin. |
-D |
Menampilkan waktu modifikasi terakhir. |
--dirsfirst |
Mengurutkan direktori sebelum file. |
-J |
Menghasilkan output dalam format JSON. |
-X |
Menghasilkan output dalam format XML. |
-o FILE |
Menyimpan output ke file yang ditentukan. |
-l |
Mengikuti tautan simbolik yang menunjuk ke direktori. |
-x |
Mencari hanya di dalam sistem file yang sama dengan lokasi awal. |
--noreport |
Mengecualikan ringkasan jumlah file dan direktori di akhir. |
Perlu berhati-hati saat digunakan di direktori besar.
Batasi kedalaman dan filter terlebih dahulu.
Jika Anda mencari di direktori root, seluruh rumah pengguna, atau direktori dependensi besar tanpa batasan, output dan waktu pemrosesan akan meningkat secara signifikan. Pertama, batasi kedalaman dengan -L dan kecualikan cabang yang tidak perlu dengan -I atau --gitignore.
Pahami biaya dari --du dan --prune
--du dan --prune mungkin perlu mengumpulkan seluruh pohon di memori sebelum menghasilkan hasil. Di direktori yang sangat besar, output mungkin tertunda dan penggunaan memori dapat meningkat.
Memeriksa kesalahan izin dan nama sensitif
Direktori yang pengguna saat ini tidak memiliki izin baca atau navigasi tidak akan ditampilkan sepenuhnya. Menjalankan sebagai administrator hanya untuk melihat seluruh struktur dapat memperluas akses secara tidak perlu, jadi periksa terlebih dahulu jalur dan izin yang dibutuhkan.
Sebelum melampirkan file output ke dokumen atau isu, tinjau untuk memastikan nama pengguna, jalur server internal, nama file rahasia, dan nama sandi proyek tidak termasuk.
FAQ
tree: perintah tidak ditemukan - mengapa kesalahan ini terjadi?
Ini terjadi karena tree tidak diinstal atau jalur eksekusi tidak ada di PATH. Instal paket tree menggunakan manajer paket distribusi Anda dan periksa dengan tree --version.
Bagaimana saya bisa melihat subdirektori hanya sampai dua tingkat?
Gunakan tree -L 2. Untuk memeriksa jalur yang berbeda, tentukan direktori di akhir seperti tree -L 2 /path/to/check.
Bisakah saya mengecualikan direktori node_modules dan .git sekaligus?
Gunakan tree -I 'node_modules|.git'. Membungkus pola dengan tanda kutip tunggal mencegah shell menginterpretasikan tanda vertikal atau wildcard terlebih dahulu.
Bagaimana saya bisa memformat keluaran tree dengan rapi untuk README?
Batasi kedalaman dan pengecualian seperti tree -L 3 -I '.git|node_modules|dist' --noreport. Setelah memastikan bahwa keluaran tidak mengandung jalur internal atau nama file sensitif, Anda bisa menempatkannya dalam blok kode untuk mempertahankan struktur.




