(ฉันสมมติว่า GNU findที่นี่)
ใช้เพียง
find filename
จะรวดเร็วเพราะมันจะกลับมาfilenameหรือชื่อภายในfilenameถ้ามันเป็นไดเรกทอรีหรือข้อผิดพลาดหากชื่อนั้นไม่มีอยู่ในไดเรกทอรีปัจจุบัน มันเป็นการดำเนินการที่รวดเร็วมากคล้ายกับls filename(แต่เรียกซ้ำถ้าfilenameเป็นไดเรกทอรี)
ในทางตรงกันข้าม,
find | grep filename
จะอนุญาตให้findสร้างรายชื่อทั้งหมดจากไดเรกทอรีปัจจุบันและด้านล่างซึ่งgrepจะกรอง เห็นได้ชัดว่านี่เป็นการทำงานที่ช้ากว่ามาก
ฉันสมมติว่าสิ่งที่ตั้งใจจริงคือ
find . -type f -name 'filename'
นี่จะมองหาfilenameเป็นชื่อของไฟล์ปกติที่ใดก็ได้ในไดเรกทอรีปัจจุบันหรือด้านล่าง
นี้จะเป็นอย่างรวดเร็ว (หรือปานด่วน) เป็นfind | grep filenameแต่grepการแก้ปัญหาจะตรงfilenameกับเส้นทางแบบเต็มของแต่ละชื่อที่พบคล้ายกับสิ่งที่จะทำอย่างไรกับ-path '*filename*'find
ความสับสนนั้นมาจากการเข้าใจผิดเกี่ยวกับวิธีการfindทำงาน
ยูทิลิตีใช้จำนวนเส้นทางและส่งคืนชื่อทั้งหมดที่อยู่ใต้เส้นทางเหล่านี้
จากนั้นคุณสามารถจำกัดชื่อที่ส่งคืนโดยใช้การทดสอบต่างๆที่อาจทำงานกับชื่อไฟล์พา ธ การประทับเวลาขนาดไฟล์ประเภทของไฟล์และอื่น ๆ
เมื่อคุณพูด
find a b c
คุณถามfindไปยังรายชื่อทุกคนอยู่ภายใต้สามเส้นทางa, และb cหากสิ่งเหล่านี้เกิดขึ้นเป็นชื่อของไฟล์ปกติในไดเรกทอรีปัจจุบันสิ่งเหล่านี้จะถูกส่งคืน หากใด ๆ ของพวกเขาเกิดขึ้นเป็นชื่อของไดเรกทอรีแล้วมันจะถูกส่งกลับพร้อมกับชื่อเพิ่มเติมทั้งหมดภายในไดเรกทอรีนั้น
เมื่อฉันทำ
find . -type f -name 'filename'
สิ่งนี้จะสร้างรายชื่อทั้งหมดในไดเรกทอรีปัจจุบัน ( .) และด้านล่าง จากนั้นก็จะ จำกัด ชื่อให้กับผู้ที่ไฟล์ปกติเช่นไม่ไดเรกทอรี ฯลฯ -type fมี จากนั้นก็มีข้อ จำกัด ต่อไปชื่อที่ตรงกับการใช้filename -name 'filename'สตริงfilenameนั้นอาจเป็นรูปแบบชื่อไฟล์ที่กำลังวนรอบเช่น*.txt(โปรดจำไว้ว่าให้พูด!)
ตัวอย่าง:
ดูเหมือนว่าต่อไปนี้จะ "ค้นหา" ไฟล์ที่เรียกว่า.profileในไดเรกทอรีบ้านของฉัน:
$ pwd
/home/kk
$ find .profile
.profile
แต่ในความเป็นจริงมันแค่คืนค่าชื่อทั้งหมดที่พา ธ.profile(มีเพียงหนึ่งชื่อเท่านั้นและนั่นคือไฟล์นี้)
จากนั้นฉันcdขึ้นหนึ่งระดับแล้วลองอีกครั้ง:
$ cd ..
$ pwd
/home
$ find .profile
find: .profile: No such file or directory
คำสั่งในขณะนี้ไม่พบเส้นทางที่เรียกว่าfind.profile
อย่างไรก็ตามถ้าฉันให้มันไปดูที่ไดเรกทอรีปัจจุบันและจากนั้นจำกัด ชื่อที่ส่งคืนไปเท่านั้น.profileมันก็พบว่าจากที่นั่นเช่นกัน:
$ pwd
/home
$ find . -name '.profile'
./kk/.profile