2010-04-23 31 views
38

Tôi tự hỏi cách liệt kê nội dung của tệp tar chỉ xuống một mức nào đó?Liệt kê nội dung của tệp tar hoặc thư mục chỉ ở một số cấp độ

Tôi hiểu tar tvf mytar.tar sẽ liệt kê tất cả các tệp nhưng đôi khi tôi chỉ muốn xem các thư mục ở một mức độ nào đó.

Tương tự, đối với lệnh ls, làm cách nào để kiểm soát cấp thư mục con sẽ được hiển thị? Theo mặc định, nó sẽ chỉ hiển thị các thư mục con trực tiếp, nhưng không đi xa hơn.

+0

Hãy xem 'cây' để liệt kê nhiều cấp độ của thư mục con sâu. – Cameron

+0

Có vẻ như 'tar -tvf mytar.tar | less' dễ hơn rất nhiều so với hầu hết các câu trả lời này. – Superbest

Trả lời

26
tar tvf scripts.tar | awk -F/ '{if (NF<4) print }' 


drwx------ glens/glens  0 2010-03-17 10:44 scripts/ 
-rwxr--r-- glens/www-data 1051 2009-07-27 10:42 scripts/my2cnf.pl 
-rwxr--r-- glens/www-data 359 2009-08-14 00:01 scripts/pastebin.sh 
-rwxr--r-- glens/www-data 566 2009-07-27 10:42 scripts/critic.pl 
-rwxr-xr-x glens/glens  981 2009-12-16 09:39 scripts/wiki_sys.pl 
-rwxr-xr-x glens/glens 3072 2009-07-28 10:25 scripts/blacklist_update.pl 
-rwxr--r-- glens/www-data 18418 2009-07-27 10:42 scripts/sysinfo.pl 

Đảm bảo lưu ý rằng số đó là 3+ tuy nhiên nhiều cấp bạn muốn, vì/trong tên người dùng/nhóm. Nếu bạn chỉ cần làm

tar tf scripts.tar | awk -F/ '{if (NF<3) print }' 

scripts/ 
scripts/my2cnf.pl 
scripts/pastebin.sh 
scripts/critic.pl 
scripts/wiki_sys.pl 
scripts/blacklist_update.pl 
scripts/sysinfo.pl 

thì chỉ còn hai lần nữa.

Bạn có thể đặt đầu ra của ls -R thành tập lệnh awk này và có cùng tác dụng.

+0

Bạn có thể giải thích phần nào của lệnh làm gì không? –

5

Sẽ rất tuyệt nếu chúng tôi có thể yêu cầu lệnh find để xem bên trong tệp tar, nhưng tôi nghi ngờ điều đó là có thể.

Tôi nhanh chóng và xấu xí (và không đơn giản) cách sẽ được hạn chế số lượng dải phân cách thư mục, ví dụ:

$ tar tvf myfile.tar | grep -E '^[^/]*(/[^/]*){1,2}$' 

Các kể để hiển thị không quá 2 dấu gạch chéo (trong trường hợp của tôi một cái đã được tạo bởi bộ phân tách người dùng/nhóm) và do đó, để hiển thị tệp ở độ sâu tối đa một tệp. Bạn có thể muốn thử các số khác nhau thay cho số 2.

5

Tôi đồng ý với leonbloy's answer - không có cách nào để thực hiện điều này một cách đơn giản trong chính bản thân tarball.

Về phần thứ hai của câu hỏi, ls không có tùy chọn độ sâu tối đa. Bạn có thể recurse mọi thứ với ls -R, nhưng điều đó thường không hữu ích.

Tuy nhiên, bạn có thể thực hiện việc này với cả hai số findtree. Ví dụ liệt kê các file và thư mục một cách sâu sắc, bạn có thể làm

find -maxdepth 2 

hoặc

tree -L 2 

tree cũng có một tùy chọn -d, mà đệ quy liệt kê các thư mục, nhưng không phải tác phẩm, mà tôi tìm thấy nhiều hơn nữa hữu ích hơn -L, nói chung.

+0

Đúng. Và bạn có thể thêm tùy chọn "-ls" vào lệnh "tìm", nếu bạn muốn một đầu ra tương tự như "tar tvf" – leonbloy

80

depth = 1

tar --exclude="*/*" -tf file.tar 


depth = 2

tar --exclude="*/*/*" -tf file.tar 
+7

Đùa thôi, đúng không ?! Đây là ở đây, và Awk được chọn làm câu trả lời. ... – ingyhere

+2

Nhưng điều này chỉ có thể nhận được tên tệp, chứ không phải tên thư mục – VicX

+0

Câu trả lời này là không thích hợp. – th3pirat3

0

lựa chọn khác là archiveamount.Bạn gắn nó, và cd vào nó. Sau đó, bạn có thể làm bất cứ điều gì với nó cũng giống như với hệ thống tập tin khác.

Có vẻ như nhanh hơn phương pháp tar.

+0

Đây là điều tốt nhất tôi đã học được trong một tuần. Thx @Sisyphus – CNSKnight

Các vấn đề liên quan