Saya bertanya-tanya apakah kita bisa menggabungkan kejujuran 'du' dengan pemformatan indentasi 'pohon'. Jika saya ingin daftar ukuran direktori:
du -hx -d2
... menampilkan dua level dan semua ringkasan ukuran jujur, tetapi tidak ada indentasi dari subdir. Di samping itu:
tree --du -shaC -L 2
... indentasi dan pewarnaan dengan baik namun ukuran yang dilaporkan adalah bohong. Untuk mendapatkan ukuran sebenarnya, seseorang harus:
tree --du -shaC
... artinya Anda hanya mendapatkan ukuran sebenarnya jika Anda membiarkan 'tree' menampilkan seluruh struktur direktori. Saya ingin selalu dapat memiliki ringkasan ukuran yang benar terlepas dari berapa banyak tingkat subdir yang ingin saya tampilkan. Saya sering melakukan ini:
tree -du -shaC | grep "\[01;34m"
... yang memangkas segalanya kecuali direktori, dan memberi indentasi dengan baik ... tetapi tidak ada cara mudah untuk membatasi tampilan hanya pada level angka tertentu (tanpa ringkasan ringkasan). Apakah ada cara? Mungkin saya telah melewatkan switch yang benar ...
sumber
Anda tidak perlu memahami kode warna,
-d
opsinya adalahlist directories only
.Ini tampaknya melakukan apa yang Anda inginkan:
The
grep
perintah menghapus semua baris yang telah (satu atau lebih spasi diikuti dengan non-ruang diikuti dengan spasi) dua kali, diikuti oleh[
.Jika Anda menginginkan kedalaman 1, ubah jumlah terikat di dalam kurung kurawal {} menjadi
{1}
alih-alih{2}
. sama jika Anda ingin kedalaman 3, ubah ke{3}
.Anda bisa mengubahnya menjadi fungsi shell, seperti:
Ini digunakan
getopts
untuk "mencuri"-L
opsi dan argumennya daritree
baris perintah, jika ada. Jika tidak ada-L n
opsi di baris perintah, maka itu juga berfungsi.Semua opsi dan argumen lainnya diteruskan ke
tree
perintah.The
local PATTERN=...
garis tidak benar-benar diperlukan. Saya hanya melakukan itu seperti itu untuk memastikan bahwa itu akan cocok pada satu baris dan bukan bungkus kata di siniU&L
. Ekspresi reguler bisa dan mungkin harus langsung ditree | grep ...
telepon.Jalankan seperti ini:
atau
sumber
-L
sebagai masalah, tidak disebutkan-d
sama sekali. Sekarang saya melihat lebih dekat pada angka yang dilaporkan, tidaktree --du
jugatree --du -d
melaporkan ukuran yang dengan cara apa pun menyerupai yang dilaporkan olehdu
.tree --du
Sepertinya tidak memberikan ukuran yang benar untuk direktori, dengan atau tanpa-d
atau-L
. Saya tidak tahu angka-angka yang seharusnya, tetapi mereka tidak terkait dengandu
laporan apa .Anda bisa menggunakan dutree
sumber
Tidak ada alat perintah yang sempurna untuk melakukan ini, Tapi saya menemukan dua cara yang dekat.
menunjukkan ukuran folder dan file, tetapi tidak ditampilkan dalam mode hierarki.
du -ah --max-depth=1 /var/log
ditampilkan dalam mode hierarki tetapi hanya ukuran file, folder dalam hitungan
tree -ah /var/log -L 1
sumber
Terinspirasi oleh cas, saya sekarang melakukan ini:
sumber
"$@"
segera memiliki setelah mendapatkan-shaC
. jika tidak, fungsi tersebut dikodekan untuk berfungsi hanya untuk direktori saat ini.getopts
adalah bahwa opsi dapat muncul dalam urutan apa pun pada baris perintah. Versi awal darimytree
fungsi yang saya tulis menggunakan "$ 1" seperti yang Anda lakukan, jadi argumen kedalaman harus menjadi argumen pertama, dan itu bukan opsional. Saya memutuskan bahwa itu tidak cukup baik sehingga menggunakan bash-builtingetopts
untuk memproses-L
opsi. Ini memungkinkan-L n
opsi muncul di mana saja di baris perintah. Itu juga memungkinkan untuk sepenuhnya opsional.getopts
memungkinkan Anda untuk menulis skrip yang mengambil opsi dan argumen nyata (bukan hanya args di posisi hard-code seperti $ 1 $ 2 $ 3 dll), seperti kebanyakan program lain di sistem Anda. Dan jika Anda menggunakangetopt
program (perhatikan bahwa tanpas
) dariutil-linux
paket Anda dapat menggunakan kedua opsi huruf tunggal (misalnya-l
) dan opsi panjang (seperti--long
) seperti program GNU.