วิธีจำกัดความลึกสำหรับรายการไฟล์วนซ้ำ?


346

มีวิธีจำกัดความลึกของรายการไฟล์วนซ้ำใน linux หรือไม่?

คำสั่งที่ฉันใช้ในขณะนี้คือ:

ls -laR > dirlist.txt

แต่ฉันมีประมาณ 200 ไดเรกทอรีและแต่ละอันมี 10 ไดเรกทอรี ดังนั้นมันจะใช้เวลานานเกินไปและทำให้ทรัพยากรระบบมากเกินไป

สิ่งที่ฉันสนใจจริงๆคือข้อมูลความเป็นเจ้าของและการอนุญาตสำหรับไดเรกทอรีย่อยระดับแรก:

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

แก้ไข:

ตัวเลือกสุดท้ายของคำสั่ง:

find -maxdepth 2 -type d -ls >dirlist

3
คุณจะชอบls -la /var/www/vhosts/*อะไรบ้าง
KevinO

คำตอบ:


494

ชำระเงินที่-maxdepthธงของfind

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

ที่นี่ฉันใช้ 1 เป็นความลึกระดับสูงสุด-type dหมายถึงค้นหาเฉพาะไดเรกทอรีซึ่งls -ldแสดงรายการเนื้อหาในรูปแบบยาว


2
ตั้งแต่ OP ต้องการที่จะรู้ว่าสิทธิ์ของไดเรกทอรีของตัวเองที่คุณควรเพิ่มตัวเลือกในการ-d ls
Peter van der Heijden

@Peter van der Heijden: ฉันเพิ่งเขียนfindส่วนเพื่อแก้ไขปัญหาหลักของเขา อย่างไรก็ตามขอขอบคุณฉันเพิ่ม
Alberto Zaccagni

3
ฉันใช้-print0และxargs -0มาก ตัวอย่าง:find . -maxdepth 1 -type d -print0 | xargs -0 ls -d
Chris K

2
โอ้ใช่มันผิดอย่างแน่นอนรู้ว่ามันไม่ได้ แต่เมื่อ 6 ปีที่แล้ว: D ฉันได้แสดงความคิดเห็นแล้วในstackoverflow.com/a/25618630/57095ว่ามันควรจะเป็นคำตอบที่ยอมรับ
Alberto Zaccagni

ahhh maxdepth มีตัวเลือกลึกหรือไม่?
Alexander Mills

95

ใช้ประโยชน์จากfindตัวเลือกของ

จริงๆแล้วไม่มี/bin/lsความจำเป็นจริง ๆ

ค้นหามีตัวเลือกที่ทำเช่นนั้น:

find . -maxdepth 2 -type d -ls

หากต้องการดูไดเรกทอรีย่อยเพียงระดับเดียวที่คุณสนใจให้เพิ่ม-mindepthในระดับเดียวกับ-maxdepth:

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


ใช้การจัดรูปแบบผลลัพธ์

เมื่อรายละเอียดที่แสดงควรแตกต่างกัน-printfสามารถแสดงรายละเอียดเกี่ยวกับไฟล์ในรูปแบบที่กำหนดเอง เพื่อแสดงสิทธิ์สัญลักษณ์และชื่อเจ้าของของไฟล์ที่ใช้-printfกับ%Mและใน%uformat

ฉันสังเกตเห็นในภายหลังว่าคุณต้องการข้อมูลความเป็นเจ้าของแบบเต็มซึ่งรวมถึงกลุ่มด้วย ใช้%gในรูปแบบสำหรับชื่อสัญลักษณ์หรือ%Gสำหรับกลุ่ม id (เช่นเดียวกับ%Uสำหรับรหัสผู้ใช้ที่เป็นตัวเลข)

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

สิ่งนี้จะให้รายละเอียดที่คุณต้องการเพียงไฟล์ที่ถูกต้อง

ฉันจะยกตัวอย่างที่แสดงค่าแตกต่างกันจริงสำหรับผู้ใช้และกลุ่ม:

$ 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

(แก้ไขเพื่อให้สามารถอ่านได้: ย่อหน้า, ย่อหน้าสุดท้ายสั้นลง)


หมายเหตุเกี่ยวกับประสิทธิภาพ

แม้ว่าเวลาดำเนินการส่วนใหญ่จะไม่เกี่ยวข้องกับคำสั่งประเภทนี้ แต่การเพิ่มประสิทธิภาพมีขนาดใหญ่พอที่จะทำให้มันคุ้มค่าที่จะชี้ให้เห็น:

ไม่เพียง แต่เราจะบันทึกการสร้างกระบวนการใหม่สำหรับแต่ละชื่อ - เป็นงานที่ยิ่งใหญ่ - ข้อมูลไม่จำเป็นต้องอ่านแม้แต่อย่างที่findทราบแล้ว


9
นี่ควรเป็นคำตอบที่ได้รับการยอมรับดีกว่าของฉันมาก
Alberto Zaccagni

1
@ AlbertoZaccagni ฉันคิดว่าเราชอบคำตอบสั้น ๆ เพื่อให้สิ่งต่าง ๆ ทำงานได้อย่างรวดเร็ว
anddero

65

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

พิมพ์แผนผังไดเร็กทอรีในรูปแบบที่สวยมากถึงความลึก 2 (-L 2) พิมพ์ผู้ใช้ (-u) และกลุ่ม (-g) และสิทธิ์ (-p) พิมพ์เฉพาะไดเรกทอรี (-d) ต้นไม้มีตัวเลือกที่มีประโยชน์อื่น ๆ อีกมากมาย


12
ต้นไม้คือความรัก ต้นไม้คือชีวิต
yosefrow

เพียงtree -L 2 xxx/หรือtree -L 2 -d xxx/เพียงพอสำหรับบางกรณี
Eric Wang

1

สิ่งที่ฉันสนใจจริงๆคือข้อมูลความเป็นเจ้าของและการอนุญาตสำหรับไดเรกทอรีย่อยระดับแรก

ฉันพบวิธีแก้ปัญหาง่าย ๆ ในขณะที่เล่นปลาของฉันซึ่งเหมาะกับความต้องการของคุณอย่างสมบูรณ์แบบ

ll `ls`

หรือ

ls -l $(ls)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.