พูดว่ามีไฟล์ชื่อ:
batman.c
debate.c
cricketbat.c
คำสั่งอะไรและฉันควรใช้มันเพื่อแสดงรายการไฟล์ทั้งหมดโดยใช้ searchtag bat?
พูดว่ามีไฟล์ชื่อ:
batman.c
debate.c
cricketbat.c
คำสั่งอะไรและฉันควรใช้มันเพื่อแสดงรายการไฟล์ทั้งหมดโดยใช้ searchtag bat?
คำตอบ:
batทุกที่ในการค้นหาไฟล์ทั้งหมดที่/path/to/folderมีชื่ออยู่ภายในbatคุณสามารถใช้:
find /path/to/folder -name '*bat*'
ฉันได้ยกมารูปแบบการค้นหา*bat*เพราะถ้าคำพูดที่ถูกมองข้ามและไฟล์ตรงกับ*bat*ในไดเรกทอรีปัจจุบันเปลือกจะขยาย*bat*เข้าไปในรายการของพวกเขาและผ่านที่findจะ ถ้าอย่างนั้นfindก็ไม่ทำงาน ( \*bat\*และ"*bat*"ยังใช้งานได้)
หากต้องการค้นหาในโฟลเดอร์ที่คุณอยู่ในปัจจุบัน (เช่นที่คุณเคยcdใช้) ให้ใช้.ตามปกติ:
find . -name '*bat*'
ในการค้นหาคอมพิวเตอร์ทั้งหมดของคุณใช้ /ในการค้นหาโฮมไดเร็กตอรี่ของคุณใช้~หรือชื่อเต็มของโฮมไดเร็กตอรี่ของคุณ ( เชลล์ขยาย~ไปยังพา ธ แบบเต็มของโฮมไดเร็กทอรีของคุณ)
หากคุณต้องการค้นหากรณี insensitively ดังนั้นไฟล์ที่มีBAT, bAtและอื่น ๆ จะถูกจับคู่ให้ใช้-inameการทดสอบแทนการ-nameทดสอบ:
find /path/to/folder -iname '*bat*'
.cฉันได้สังเกตเห็นท้ายไฟล์ทั้งหมดใน หากคุณต้องการค้นหาไฟล์เช่นนั้นให้ใช้:
find /path/to/folder -name '*bat*.c'
ฉันสังเกตว่าชื่อไฟล์ทั้งหมดของคุณมีbatตอนเริ่มต้นหรือตอนท้ายสุดของส่วนก่อนหน้า.cคำต่อท้าย หากคุณต้องการหลีกเลี่ยงการจับคู่ไฟล์เช่นembattled.cคุณสามารถใช้:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-oเป็นหรือผู้ประกอบการ
ในการค้นหาไฟล์ปกติเท่านั้น- ไม่ใช่โฟลเดอร์ลิงก์สัญลักษณ์และโหนดอุปกรณ์พิเศษ - คุณสามารถ-type fใช้ได้ นี่เป็นคำแนะนำที่บ่อยครั้งและบางครั้งก็ค่อนข้างเหมาะสม ... แต่มักจะไม่ใช่สิ่งที่คุณต้องการโดยเฉพาะอย่างยิ่งถ้าคุณกำลังทำงานfindเพื่อจุดประสงค์ในการตรวจสอบผลลัพธ์ด้วยตัวคุณเอง หากคุณมีลิงค์สัญลักษณ์ที่ตรงกับการค้นหาของคุณคุณจะไม่ต้องการรู้เกี่ยวกับมัน?
หากคุณต้องการค้นหาทั้งไฟล์ปกติและลิงก์สัญลักษณ์คุณสามารถใช้:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
ที่ใช้-oโอเปอเรเตอร์และเครื่องหมายวงเล็บสำหรับการจัดกลุ่ม (ซึ่งจะต้องยกมาด้วยดังนั้นเชลล์จะไม่จัดการกับมันเป็นพิเศษมิฉะนั้นคุณจะได้รับข้อผิดพลาดทางไวยากรณ์)
แต่สมมติว่าคุณต้องการเห็นลิงก์สัญลักษณ์ที่ชี้ไปที่ไฟล์ปกติในที่สุด (และไม่ใช่ลิงก์สัญลักษณ์ไปยังไดเรกทอรีโหนดอุปกรณ์ ฯลฯ ) ที่จริงได้ง่ายใช้งาน: ใช้แทน-xtype -typeหากคุณไม่ได้ทำงานfindกับการ-Lตั้งค่าสถานะ-xtypeบนลิงก์สัญลักษณ์ทดสอบประเภทของไฟล์ที่ลิงก์ชี้ไป
find /path/to/folder -name '*bat*' -xtype f
หากคุณมี symlink ไปยัง symlink อื่นในไฟล์-xtype fจะจับคู่แม้ว่าเป้าหมายโดยตรงของมันจะเป็น symlink อื่นแทนที่จะเป็นไฟล์ปกติ นี่คือสิ่งที่คุณต้องการเกือบทุกครั้ง
คนมักจะคิดว่าพวกเขาต้องการแต่จริงๆที่พวกเขาต้องการ-type f-xtype f
findการกระทำเริ่มต้นของหากคุณไม่ได้ระบุ-printไว้ คำสั่งทั้งหมดที่ให้ไว้ข้างต้นจะเทียบเท่ากับตัวเองที่-printติดอยู่ในตอนท้าย
findมักใช้เพื่อเรียกใช้คำสั่งตามไฟล์ที่พบบ่อยครั้งคำสั่งที่ทำการเปลี่ยนแปลง แต่ยังมีการกระทำอื่น ๆ -printที่มีวัตถุประสงค์เพื่อแสดงผลลัพธ์ที่นอกเหนือจาก สิ่งที่น่าสนใจเป็นพิเศษคือ-ls:
find /path/to/folder -name '*bat*' -ls
นี้จะช่วยให้รายละเอียดเกี่ยวกับแต่ละไฟล์ในรูปแบบหลายคอลัมน์คล้ายกับ ( แต่ไม่มากเช่นเดียวกับ) สิ่งที่คุณจะได้เห็นด้วยการวิ่งls file
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับfindวิธีการค้นหาไฟล์โปรดดู:
findหน้าคู่มือออนไลน์สามารถเข้าถึงหรือโดยการทำงานman findในสถานีfind, locateและxargsสาธารณูปโภค-xtypeคำแนะนำ; อาจls *bat*และ-maxdepth/ mindepthยังเป็นมูลค่าการกล่าวขวัญ
lsแล้วฉันมุ่งเน้นไปที่กรณี recursive กับfindที่นี่ แน่นอนคำตอบโดยละเอียดที่ครอบคลุมรายการชื่อไฟล์ที่ไม่ซ้ำกัน (หรือน้อยกว่า) ที่ตรงกับรูปแบบ ( lsและfindด้วย-maxdepth) จะมีประโยชน์เช่นกัน คุณอาจต้องการโพสต์คำตอบดังกล่าว!
วิธีที่ง่ายที่สุดคือเรียกใช้
locate bat
วิธีนี้คุณสามารถค้นหาไฟล์ที่มี "bat" ในคอมพิวเตอร์ได้จากชื่อไฟล์
เพื่อรีเฟรชรายการไฟล์บนพีซีของคุณ
updatedb
เรียกใช้คำสั่งนี้เมื่อคุณเพิ่งเพิ่มไฟล์ใหม่ในบัญชีของคุณ
updatetdb
updatedbสุดท้ายด้วยตนเองหรือเรียกใช้โดยอัตโนมัติ) sudo updatedbจะต้องมีการเรียกใช้ก่อนใช่
batหมายเหตุที่ว่านี้จะค้นหาทั้งระบบสำหรับชื่อที่ตรงกัน
find /เป็นlocateการค้นหาข้อมูลจากฐานข้อมูลในขณะที่findรายชื่อซ้ำ/แล้วตรงกับ regex ไม่
เปิดเทอร์มินัลและเปลี่ยนไดเรกทอรีเป็นไดเรกทอรีที่คุณต้องการเริ่มการค้นหาแล้วเรียกใช้คำสั่งนี้:
find . -name "*bat*" -type f
.เริ่มค้นหาคำสั่งจากไดเรกทอรีปัจจุบัน ตรงกับสตริงและเป็นกรณีที่สำคัญ ( ไม่คำนึงถึงขนาดตัวพิมพ์)
การค้นหาไฟล์เท่านั้น-namebat-iname-type f
หากไฟล์อยู่ในไดเรกทอรีปัจจุบันให้ใช้:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
หรือ (เพื่อให้พวกเขาทีละบรรทัด):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
หากคุณต้องการค้นหาไฟล์ระบบนั้นให้ใช้:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
คุณต้องการใช้findคำสั่งโดยมี-inameตัวเลือกสำหรับการจับคู่ชื่อไฟล์ที่ไม่ตรงตาม-nameตัวพิมพ์ใหญ่หรือตัวเลือกสำหรับชื่อไฟล์ที่ตรงตามตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก ทั้งสองอย่างนี้จะช่วยให้คุณใช้ชื่อตัวแทน ดังนั้นหากต้องการค้นหาชื่อไฟล์ใด ๆ ที่มี "bat" คุณจะต้องใช้:
find / -iname '*bat*'
หรือ
find / -name '*bat*'
*หมายถึง "ตัวอักษรใด ๆ (s)" เพื่อการค้นหาที่กำลังมองหาbatที่มีตัวอักษรใด ๆ รวมทั้งใครก่อนหรือหลังจากที่มัน การ/ค้นหาจากไดเร็กทอรีรูทแบบเรียกซ้ำคุณสามารถใช้.ซึ่งจะค้นหาแบบซ้ำ ๆ จากไดเร็กทอรีปัจจุบันหรือพา ธ สัมบูรณ์สำหรับตำแหน่งที่คุณต้องการค้นหา ดูวิธีค้นหาไฟล์โดยใช้ regex ใน linux shell script
-type fซึ่งจะมากกว่าเพียงแค่ไม่รวมไดเรกทอรีและเป็นมักจะไม่ได้สิ่งที่ผู้ใช้ต้องการจริงๆ
findใช้ดีเก่า
find <path_for_search> -type f -iname "*bat*"
เช่น.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
จากman find:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.