มีคำสั่ง linux ที่ฉันสามารถโทรจาก Bash script ที่จะพิมพ์โครงสร้างไดเรกทอรีในรูปแบบของต้นไม้เช่น
folder1
a.txt
b.txt
folder2
folder3
มีคำสั่ง linux ที่ฉันสามารถโทรจาก Bash script ที่จะพิมพ์โครงสร้างไดเรกทอรีในรูปแบบของต้นไม้เช่น
folder1
a.txt
b.txt
folder2
folder3
คำตอบ:
นี่คือสิ่งที่คุณกำลังมองหาต้นไม้หรือไม่? ควรอยู่ในการกระจายส่วนใหญ่ (อาจเป็นการติดตั้งเสริม)
~> tree -d /proc/self/
/proc/self/
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/fd
|-- fdinfo
|-- net
| |-- dev_snmp6
| |-- netfilter
| |-- rpc
| | |-- auth.rpcsec.context
| | |-- auth.rpcsec.init
| | |-- auth.unix.gid
| | |-- auth.unix.ip
| | |-- nfs4.idtoname
| | |-- nfs4.nametoid
| | |-- nfsd.export
| | `-- nfsd.fh
| `-- stat
|-- root -> /
`-- task
`-- 15589
|-- attr
|-- cwd -> /proc
|-- fd
| `-- 3 -> /proc/15589/task/15589/fd
|-- fdinfo
`-- root -> /
27 directories
ตัวอย่างที่นำมาจากหน้าเว็บของผู้ดูแล
คุณสามารถเพิ่มตัวเลือก-L #
ที่#
จะถูกแทนที่ด้วยตัวเลขเพื่อระบุความลึกของการเรียกซ้ำสูงสุด
ลบ-d
เพื่อแสดงไฟล์
-d
เพื่อแสดงไฟล์ด้วย!
brew install tree
apt-cyg install tree
(สมมติว่าคุณติดตั้ง apt-cyg)
apt-get install tree
จะติดตั้งมัน
คุณสามารถใช้อันนี้:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
มันจะแสดงการแสดงกราฟิกของไดเรกทอรีย่อยปัจจุบันโดยไม่ต้องไฟล์ในไม่กี่วินาทีเช่นใน/var/cache/:
.
|-apache2
|---mod_cache_disk
|-apparmor
|-apt
|---archives
|-----partial
|-apt-xapian-index
|---index.1
|-dbconfig-common
|---backups
|-debconf
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\// /g' -e 's/^/ /'
.git
?
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
หากต้องการเพิ่มโซลูชันของ Hassou ให้กับ. bashrc ของคุณให้ลอง:
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"
alias lst='ls -R | grep ":$" | sed -e '"'"'s/:$//'"'"' -e '"'"'s/[^-][^\/]*\//--/g'"'"' -e '"'"'s/^/ /'"'"' -e '"'"'s/-/|/'"'"''
คำสั่งนี้จะทำงานเพื่อแสดงทั้งโฟลเดอร์และไฟล์
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
ตัวอย่างผลลัพธ์:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
ที่มา:ความคิดเห็นจาก @javasheriff ที่นี่ มันจมอยู่ใต้ความคิดเห็นและโพสต์มันเป็นคำตอบช่วยให้ผู้ใช้มองเห็นได้ง่าย
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
ทำงานได้ดี
ฉันกำลังส่งเอาต์พุตคำตอบของ @ Hassou ไว้ล่วงหน้าด้วย:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
นี่เป็นเหมือนผลลัพธ์ที่ได้ในtree
ตอนนี้:
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
คุณสามารถสร้างนามแฝงได้:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
BTW tree
ไม่สามารถใช้ได้ในบางสภาพแวดล้อมเช่น MinGW ดังนั้นทางเลือกจึงมีประโยชน์
คุณยังสามารถใช้การรวมกันของคำสั่ง find และ awk เพื่อพิมพ์แผนผังไดเรกทอรี สำหรับรายละเอียดโปรดอ้างอิง " วิธีการพิมพ์โครงสร้างไดเรกทอรีต้นไม้หลายระดับโดยใช้คำสั่ง linux find และ awk รวมกัน "
find . -type d | awk -F'/' '{
depth=3;
offset=2;
str="| ";
path="";
if(NF >= 2 && NF < depth + offset) {
while(offset < NF) {
path = path "| ";
offset ++;
}
print path "|-- "$NF;
}}'
find
วิ่งเพียง หรือไปยังไฟล์ที่ซ่อนและโฟลเดอร์เริ่มต้นด้วยfind . -not -path '*/\.*'
.
หากคุณต้องการให้มีช่องว่างเช่นเดียวกับในคำถามใช้กับสคริปต์ "find prettifier" นี้:find . -not -path '*/\.*' | python -c "import sys as s;s.a=[];[setattr(s,'a',list(filter(lambda p: c.startswith(p+'/'),s.a)))or (s.stdout.write(' '*len(s.a)+c[len(s.a[-1])+1 if s.a else 0:])or True) and s.a.append(c[:-1]) for c in s.stdin]"