Có lệnh linux nào mà tôi có thể gọi từ tập lệnh Bash sẽ in cấu trúc thư mục dưới dạng cây không, ví dụ:
folder1
a.txt
b.txt
folder2
folder3
Có lệnh linux nào mà tôi có thể gọi từ tập lệnh Bash sẽ in cấu trúc thư mục dưới dạng cây không, ví dụ:
folder1
a.txt
b.txt
folder2
folder3
Câu trả lời:
Đây có phải là những gì bạn đang tìm kiếm cây ? Nó nên có trong hầu hết các bản phân phối (có thể là một cài đặt tùy chọn).
~> 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
mẫu lấy từ trang web của người bảo trì.
Bạn có thể thêm tùy chọn -L #
nơi #
được thay thế bằng một số, để chỉ định độ sâu đệ quy tối đa.
Xóa -d
để hiển thị tập tin.
-d
để hiển thị các tập tin cũng!
brew install tree
apt-cyg install tree
(giả sử bạn đã cài đặt apt-cyg)
apt-get install tree
sẽ cài đặt nó.
Bạn có thể sử dụng cái này:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'
Nó sẽ hiển thị biểu diễn đồ họa của các thư mục con hiện tại không có tệp trong vài giây , ví dụ /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/"
Để thêm giải pháp của Hassou vào .bashrc của bạn, hãy thử:
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/-/|/'"'"''
Lệnh này hoạt động để hiển thị cả thư mục và tập tin .
find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
Ví dụ đầu ra:
.
|-trace.pcap
|-parent
| |-chdir1
| | |-file1.txt
| |-chdir2
| | |-file2.txt
| | |-file3.sh
|-tmp
| |-json-c-0.11-4.el7_0.x86_64.rpm
Nguồn: Nhận xét từ @javasheriff tại đây . Nó chìm dưới dạng một bình luận và đăng nó dưới dạng câu trả lời giúp người dùng dễ dàng nhận ra nó.
find . |grep -vE 'pyc|swp|__init' | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
làm việc tốt
Tôi đang chuẩn bị đầu ra cho câu trả lời của @ Hassou với:
ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//──/g' -e 's/─/├/' -e '$s/├/└/'
Điều này giống như đầu ra của tree
bây giờ:
.
├─pkcs11
├─pki
├───ca-trust
├─────extracted
├───────java
├───────openssl
├───────pem
├─────source
├───────anchors
├─profile.d
└─ssh
Bạn cũng có thể tạo một bí danh của nó:
alias ltree=$'ls -R | grep ":$" | sed -e \'s/:$//\' -e \'s/[^-][^\/]*\//──/g\' -e \'s/─/├/\' -e \'$s/├/└/\''
BTW, tree
không có sẵn trong một số môi trường, như MinGW. Vì vậy, sự thay thế là hữu ích.
Bạn cũng có thể sử dụng kết hợp các lệnh find và awk để in cây thư mục. Để biết chi tiết, vui lòng tham khảo " Cách in cấu trúc thư mục cây đa cấp bằng cách sử dụng các lệnh kết hợp linux find và 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
. Hoặcfind . -not -path '*/\.*'
để ẩn các tập tin và thư mục bắt đầu với.
. Nếu bạn muốn có đầu ra có khoảng trắng, như trong câu hỏi, hãy sử dụng nó với tập lệnh "find prettifier" này: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]"