หา - maxdepth 0 ไม่ส่งคืนเอาต์พุตใด ๆ ให้ฉัน


17

ฉันพยายามที่จะเข้าใจวิธีการใช้find -maxdepth 0ตัวเลือก

ฉันมีโครงสร้างไดเรกทอรีด้านล่าง

--> file1
--> parent
          --> child1
                   --> file1
                   --> file2
          --> child2
                   --> file1
                   --> file2
          --> file1

ตอนนี้ฉันรันfindคำสั่งของฉันดังต่อไปนี้

find ./parent -maxdepth 0 -name "file1"
find ./ -maxdepth 0 -name "file1"
find . -maxdepth 0 -name "file1"

หากไม่มีfindคำสั่งข้างต้นfile1จะถูกส่งคืน

จากหน้าคนของfindฉันเห็นข้อมูลด้านล่าง

-maxdepth 0 หมายถึงใช้การทดสอบและการดำเนินการกับอาร์กิวเมนต์บรรทัดคำสั่งเท่านั้น

ฉันค้นหาตัวอย่างด้วย-maxdepth 0ตัวเลือกและไม่พบตัวอย่างที่เหมาะสม

findรุ่นของฉันคือ

find --version
find (GNU findutils) 4.4.2

ใครช่วยกรุณาชี้ให้ฉันซึ่ง-maxdepth 0ตัวเลือกกรณีที่จะมีประโยชน์?

แก้ไข

เมื่อฉันรันคำสั่งด้านล่างฉันจะได้รับfile1แสดงอยู่สองครั้ง นี่ตั้งใจจะใช้วิธีนี้ไหม?

find . file1 -maxdepth 1 -name "file1"
./file1
file1

คำตอบ:


24

ให้เราสมมติว่าเรามีfile1ในไดเรกทอรีปัจจุบัน แล้ว:

$ find . -maxdepth 0 -name "file1"
$ find . file1 -maxdepth 0 -name "file1"
file1

ตอนนี้มาดูกันว่าเอกสารระบุอะไร:

-maxdepth 0 หมายถึงใช้การทดสอบและการดำเนินการกับอาร์กิวเมนต์บรรทัดคำสั่งเท่านั้น

ในตัวอย่างแรกของฉันด้านบนเฉพาะไดเรกทอรีเท่านั้นที่.แสดงรายการบนบรรทัดคำสั่ง เนื่องจาก.ไม่มีชื่อfile1จึงไม่มีสิ่งใดแสดงในเอาต์พุต ในตัวอย่างที่สองของฉันด้านบนทั้งสอง.และfile1ถูกแสดงรายการในบรรทัดคำสั่งและเนื่องจากการfile1จับคู่-name "file1"มันถูกส่งคืนในเอาต์พุต

ในคำอื่น ๆ-maxdepth 0หมายถึงไม่ได้ค้นหาไดเรกทอรีหรือไดเรกทอรีย่อย ค้นหาไฟล์ที่ตรงกันระหว่างไฟล์ที่แสดงรายการไว้อย่างชัดเจนในบรรทัดคำสั่ง

ในตัวอย่างของคุณมีเพียงไดเรกทอรีที่ระบุไว้ในบรรทัดคำสั่งและไม่มีชื่อfile1ใด ๆ ดังนั้นจึงไม่มีผลลัพธ์

โดยทั่วไปไฟล์และไดเรกทอรีจำนวนมากสามารถตั้งชื่อได้ในบรรทัดคำสั่ง ตัวอย่างเช่นที่นี่เราลองfindคำสั่งที่มี 11 ไฟล์และไดเรกทอรีในบรรทัดคำสั่ง:

$ ls
d1  file1  file10  file2  file3  file4  file5  file6  file7  file8  file9
$ find d1 file1 file10 file2 file3 file4 file5 file6 file7 file8 file9 -maxdepth 0 -name "file1"
file1

เส้นทางที่ทับซ้อนกัน

พิจารณา:

$ find . file1 -maxdepth 0 -iname file1
file1
$ find . file1 file1 -maxdepth 0 -iname file1
file1
file1
$ find . file1 file1 -maxdepth 1 -iname file1
./file1
file1
file1

เห็นได้ชัดว่าเป็น Ramesh ชี้ให้เห็นfindจะเป็นไปตามเส้นทางที่ระบุในบรรทัดคำสั่งและดูสำหรับการแข่งขันในแต่ละแม้ว่าเส้นทางที่นำไปสู่ไฟล์เดียวกันเช่นเดียวกับในหรือแม้กระทั่งถ้าเส้นทางที่มีการซ้ำกันแน่นอนในขณะที่ . filefile1 file1


ขอบคุณ แต่ฉันจะส่งชื่อไฟล์บางอย่างในบรรทัดคำสั่งได้อย่างไร
Ramesh

จุดดี. ดูคำตอบที่อัปเดตของฉัน คุณสามารถใส่ได้มากเท่าที่คุณต้องการก่อนการทดสอบครั้งแรก ตัวอย่างเช่นfind * -maxdepth 0 -name "file1". *จะแสดงรายการไฟล์ในไดเรกทอรีปัจจุบันทุกในบรรทัดคำสั่ง
John1024

1
@Ramesh ตอบกลับอัปเดตอีกครั้งด้วยฉันหวังว่าคำอธิบายและตัวอย่างที่ดีกว่า
John1024

ขอบคุณอีกครั้ง. ฉันอัปเดตคำถามของฉันพร้อมรายละเอียดเพิ่มเติมจากการอัปเดตล่าสุดของคุณ
Ramesh

@Ramesh ฉันไม่พบเอกสาร แต่ฉันเห็นพฤติกรรมแบบเดียวกันกับที่คุณทำ: findดูที่แต่ละพา ธ บนบรรทัดคำสั่งและรายงานตรงกันในแต่ละรายการแม้ว่าจะซ้ำกัน
John1024
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.