มีตัวเลือกความกว้าง / ลึก - แรกในยูทิลิตี้ `find 'ของ Linux หรือไม่?
มีตัวเลือกความกว้าง / ลึก - แรกในยูทิลิตี้ `find 'ของ Linux หรือไม่?
คำตอบ:
ไม่มีอะไรในตัวที่จะค้นหาแม้แต่ GNU ก็พบ คุณสามารถประมวลผลผลลัพธ์ของfind
การเรียงลำดับตามจำนวนเครื่องหมายทับตัวอย่างเช่นด้วย Perl:
find ... | perl -e 'print sort {$a=~s!/!/! <=> $b=~s!/!/!} <>'
<>
คือรายการของอินพุตทั้งหมด$a =~ s!/!/!g
คือจำนวนเครื่องหมายทับ$a
ซึ่งเราใช้เป็นเกณฑ์การเรียงลำดับหากคุณสามารถใช้ zsh:
echo **/*(oe\''REPLY=${REPLY//[^\/]}'\')
**/*
แสดงรายการไฟล์ทั้งหมดในไดเรกทอรีปัจจุบันและไดเรกทอรีย่อยoe
จะควบคุมลำดับที่จะส่งคืนการจับคู่: เรียงลำดับตามค่าREPLY
หลังจากเรียกใช้โค้ดที่นี่ในเครื่องหมายคำพูดสำหรับการแข่งขันแต่ละครั้งโดยREPLY
ตั้งค่าเริ่มต้นเป็นเส้นทางที่ตรงกัน$REPLY
เพื่อลบทุกอย่างยกเว้นเครื่องหมายทับ ดังนั้นผลลัพธ์ประกอบด้วยทุกอย่างที่ความลึก 1 (ว่างเปล่าที่เกิดขึ้น$REPLY
) จากนั้นทุกอย่างที่ความลึก 2 ( $REPLY
จบลงด้วยการเป็น/
) ความลึก 3 ( //
) เป็นต้นNope
ไปที่คำถามนี้สำหรับ SO เพื่อแก้ไขปัญหา
ความรู้สึกของฉันคือคุณสามารถ มันเกี่ยวข้องกับ grep และเช่นและวนรอบ แต่ฉันคิดว่ามันทำงานได้ดีมากโดยเฉพาะสำหรับกรณีของคุณเกี่ยวกับการค้นหาที่ไม่จำเป็นต้องทำให้เสร็จ
มีทรัพยากรมากขึ้นเนื่องจาก:
นี่เป็นสิ่งที่ดีเพราะ:
#! / bin / ทุบตี ความลึก = 0 ในขณะที่ค้นหา -mindepth $ depth -maxdepth $ depth | grep '.' ทำ ความลึก = $ ((ความลึก + 1)) เสร็จแล้ว
คุณสามารถใส่ลงในหนึ่งบรรทัดได้อย่างง่ายดาย
depth=0; while find -mindepth $depth -maxdepth $depth | grep --color=never '.'; do depth=$((depth + 1)); done
แต่ฉันชอบสคริปต์ขนาดเล็กมากกว่าการพิมพ์ ...