พูดว่ามีไฟล์ชื่อ:
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
.
เริ่มค้นหาคำสั่งจากไดเรกทอรีปัจจุบัน ตรงกับสตริงและเป็นกรณีที่สำคัญ ( ไม่คำนึงถึงขนาดตัวพิมพ์)
การค้นหาไฟล์เท่านั้น-name
bat
-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.