Làm thế nào để giới hạn độ sâu cho danh sách tệp đệ quy?


346

Có cách nào để giới hạn độ sâu của danh sách tệp đệ quy trong linux không?

Lệnh tôi đang sử dụng tại thời điểm này là:

ls -laR > dirlist.txt

Nhưng tôi đã có khoảng 200 thư mục và mỗi thư mục có 10 thư mục. Vì vậy, nó sẽ mất quá nhiều thời gian và quá nhiều tài nguyên hệ thống.

Tất cả những gì tôi thực sự quan tâm là thông tin về quyền sở hữu và quyền đối với các thư mục con cấp đầu tiên:

drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/htdocs  
drwxr--r-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain1.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/htdocs  
drwxr-xrwx 14 proftp root  1234 Dec 22 13:19 /var/www/vhosts/domain2.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/htdocs  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain3.co.uk/cgi-bin  
drwxr-xr-x 14 root   root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk  
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/htdocs
drwxr-xr-- 14 jon    root  1234 Dec 22 13:19 /var/www/vhosts/domain4.co.uk/cgi-bin

BIÊN TẬP:

Lựa chọn cuối cùng của lệnh:

find -maxdepth 2 -type d -ls >dirlist

3
Bạn cũng có thể như thế ls -la /var/www/vhosts/*nào?
KevinO

Câu trả lời:


494

Kiểm tra -maxdepthcờ củafind

find . -maxdepth 1 -type d -exec ls -ld "{}" \;

Ở đây tôi đã sử dụng 1 làm độ sâu mức tối đa, -type dcó nghĩa là chỉ tìm các thư mục, sau đó ls -ldliệt kê nội dung, ở định dạng dài.


2
Vì OP muốn biết các quyền của chính các thư mục, bạn nên thêm -dtùy chọn vào ls.
Peter van der Heijden

@Peter van der Heijden: Tôi chỉ viết findphần để giải quyết vấn đề chính của anh ấy. Dù sao cũng cảm ơn tôi đang thêm nó.
Alberto Zaccagni

3
Tôi sử dụng -print0xargs -0rất nhiều. Ví dụ:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Chris K

2
Ồ vâng, chắc chắn là nó có vẻ sai, nhưng điều đó đã không xảy ra cách đây 6 năm: D Tôi đã nhận xét về stackoverflow.com/a/25618630/57095 rằng đó phải là câu trả lời được chấp nhận.
Alberto Zaccagni

Tối đa ahhh, có một tùy chọn độ sâu?
Alexander Mills

95

Tận dụng find tùy chọn của

Thực tế không có người thực hiện /bin/lscần thiết;

Tìm có một tùy chọn thực hiện điều đó:

find . -maxdepth 2 -type d -ls

Để chỉ xem một cấp thư mục con mà bạn quan tâm, hãy thêm -mindepthvào cấp độ tương tự như -maxdepth:

find . -mindepth 2 -maxdepth 2 -type d -ls


Sử dụng định dạng đầu ra

Khi các chi tiết được hiển thị phải khác nhau, -printfcó thể hiển thị bất kỳ chi tiết nào về một tệp ở định dạng tùy chỉnh; Để hiển thị các quyền biểu tượng và tên chủ sở hữu của tệp, sử dụng -printfvới %M%utrong format.

Tôi nhận thấy sau này bạn muốn có thông tin sở hữu đầy đủ, bao gồm cả nhóm. Sử dụng %gở định dạng cho tên tượng trưng hoặc %Gcho id nhóm (cũng như %Uid người dùng số)

find . -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'

Điều này sẽ cung cấp cho bạn các chi tiết bạn cần, chỉ cho các tệp đúng.

Tôi sẽ đưa ra một ví dụ cho thấy các giá trị thực sự khác nhau cho người dùng và nhóm:

$ sudo find /tmp -mindepth 2 -maxdepth 2 -type d -printf '%M %u %g %p\n'
drwx------ www-data  www-data /tmp/user/33
drwx------ octopussy root     /tmp/user/126
drwx------ root      root     /tmp/user/0
drwx------ siegel    root     /tmp/user/1000
drwxrwxrwt root      root     /tmp/systemd-[...].service-HRUQmm/tmp

(Đã chỉnh sửa để dễ đọc: thụt dòng, rút ​​ngắn dòng cuối cùng)


Ghi chú về hiệu suất

Mặc dù thời gian thực hiện hầu như không liên quan đến loại lệnh này, nhưng hiệu suất tăng ở đây đủ lớn để khiến nó đáng để chỉ ra:

Chúng tôi không chỉ tiết kiệm việc tạo ra một quy trình mới cho mỗi tên - một nhiệm vụ lớn - thông tin thậm chí không cần phải đọc, như findđã biết.


9
Đây phải là câu trả lời được chấp nhận, tốt hơn nhiều so với của tôi.
Alberto Zaccagni

1
@AlbertoZaccagni Tôi đoán chúng tôi thích câu trả lời ngắn để nhanh chóng khiến mọi thứ hoạt động.
anddero

65

tree -L 2 -u -g -p -d

In cây thư mục ở định dạng đẹp lên đến độ sâu 2 (-L 2). Người dùng in (-u) và nhóm (-g) và quyền (-p). Chỉ in các thư mục (-d). cây có rất nhiều lựa chọn hữu ích khác.


12
Cây là tình yêu. cây là sự sống.
yosefrow

Đơn giản tree -L 2 xxx/hoặc tree -L 2 -d xxx/là đủ cho một số trường hợp.
Eric Wang

1

Tất cả những gì tôi thực sự quan tâm là quyền sở hữu và thông tin cấp phép cho các thư mục con cấp đầu tiên.

Tôi tìm thấy một giải pháp dễ dàng trong khi chơi cá của tôi, phù hợp với nhu cầu của bạn một cách hoàn hảo.

ll `ls`

hoặc là

ls -l $(ls)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.