ทำไมจุดในการค้นหาคำสั่ง


14

โดยปกติแล้วจะเห็นfindคำสั่งที่มีลักษณะดังนี้:

$ find . -name foo.txt

เมื่อการค้นหาจะเริ่มจากไดเรกทอรีปัจจุบัน ฉันพบว่าบนเครื่องของฉัน (Ubuntu, Cygwin) ฉันได้ผลลัพธ์เดียวกันโดยไม่มีจุด

ทำไมถึงรวมอยู่ด้วย? มันเป็นเพียงการประชุมที่จะชัดเจนหรือเป็น / มันจำเป็นในบางระบบ?

คำตอบ:


27

บางรุ่นfindจำเป็นต้องให้คุณระบุอาร์กิวเมนต์พา ธ ซึ่งเป็นไดเรกทอรีที่จะเริ่มการค้นหา Dot .เป็นตัวแทนของไดเรกทอรีปัจจุบันที่มักจะเป็นที่ที่คุณต้องการค้นหา

คุณสามารถแทนที่สิ่งนี้ด้วยพา ธ ที่คุณต้องการให้เป็นฐานของการค้นหา ในบางรุ่นของการค้นหานี้สามารถทิ้งไว้ได้เพราะไดเรกทอรีปัจจุบันมีความหมายโดยนัยถ้าไม่มีการโต้แย้งเส้นทาง

คุณสามารถเรียกใช้man findในเชลล์เพื่อดูรายละเอียดเกี่ยวกับอาร์กิวเมนต์ ตัวอย่างเช่นบทสรุปการใช้งานของฉันบ่งบอกว่าอาร์กิวเมนต์ของพา ธ นั้นเป็นตัวเลือก (ภายในเครื่องหมายวงเล็บเหลี่ยม[]):

   find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression]

หากคุณวิ่งของฉันfindโดยไม่มีข้อโต้แย้งไฟล์และไดเรกทอรีทั้งหมดที่เริ่มต้นจากโฟลเดอร์ปัจจุบันจะถูกส่งกลับ ตัวอย่างของคุณระบุอย่างชัดเจนว่าการค้นหาควรเริ่มต้นจาก.และรวมถึงนิพจน์-name foo.txtเป็นหนึ่งในตัวกรองการค้นหา

* ยวดทั้งหมดBSD พันธุ์และสิ่งติดอย่างเคร่งครัดเพื่อมาตรฐาน POSIX GNU findช่วยให้สามารถเลือกได้


1
คุณรู้หรือไม่ว่าการค้นหารุ่นใดจำเป็นต้องใช้สิ่งนี้? หรือที่ฉันสามารถตรวจสอบเพิ่มเติมได้ที่ไหน (หายากสำหรับ google)
Eric Wilson

สิ่งที่น่าสนใจเกี่ยวกับเส้นทางการค้นหาเริ่มต้น
rozcietrzewiacz

2
ฉันเชื่อว่าBSD find variants ต้องการอาร์กิวเมนต์ path ในGNU พบว่าเป็นตัวเลือก อาจมีการเปลี่ยนแปลง
Caleb

2
โปรดทราบว่าในเวลาอย่างน้อย 2008 POSIX ข้อกำหนดมาตรฐานคืออาร์กิวเมนต์ที่จำเป็นต้องใช้ในการค้นหาpath
Caleb

1
Nit pick:“ คุณสามารถแทนที่ [จุด] นี้ด้วยเส้นทางใดก็ได้ที่คุณต้องการ” →“ เส้นทางใด ๆที่คุณต้องการ” เนื่องจากคุณสามารถพูดfind dir1 dir2 dir3 -name foo.txtได้
G-Man กล่าวว่า 'Reinstate Monica'

5

ตัวอย่างของการค้นหาเวอร์ชัน AIX ต้องการพา ธ และจะไม่รันหากไม่มีการระบุ

# oslevel -s
5300-08-03-0831
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

# oslevel -s
6100-03-01-0921
# find -name bob
Usage: find [-H | -L] Path-list [Expression-list]

แม้ว่าเครื่อง AIX บางเครื่องอาจมี GNU find find ติดตั้งอยู่ซึ่งสามารถจัดการได้โดยไม่มีพา ธ

# oslevel -s
6100-03-01-0921
# /opt/freeware/bin/find -version
GNU find version 4.1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.