ค้นหาไฟล์ทั้งหมดที่มีชื่อไฟล์ขึ้นต้นด้วยสตริงที่ระบุหรือไม่


148

ฉันมีไดเรกทอรีที่มีไฟล์ประมาณ 100,000 ไฟล์และฉันต้องการใช้งานบางฟังก์ชั่นในทุกไฟล์ที่ขึ้นต้นด้วยสตริงที่ระบุซึ่งอาจตรงกับไฟล์นับหมื่น

ฉันเหนื่อย

ls mystring*

แต่สิ่งนี้จะกลับมาพร้อมกับข้อผิดพลาดทุบตี 'มีจำนวนอาร์กิวเมนต์มากเกินไป' แผนต่อไปของฉันคือการใช้

find ./mystring* -type f

แต่สิ่งนี้มีปัญหาเดียวกัน

รหัสต้องมีลักษณะเหมือน

for FILE in `find ./mystring* -type f`
do
    #Some function on the file
done

แทนที่จะเป็นforห่วงคุณควรท่อเข้าไปในfind while
หยุดชั่วคราวจนกว่าจะมีการแจ้งให้ทราบต่อไป

คำตอบ:


277

ใช้

find . -name 'mystring*'

10
และเพื่อเรียกใช้ฟังก์ชั่นบางอย่าง "find. -name 'mystring *' -exec [command]" เช่นลบ "find. -name 'mystring *' -exec rm {} \;"
Eldar

2
โดยที่ {} เป็นตัวยึดตำแหน่งสำหรับชื่อไฟล์ :-) (เพื่อให้คุณสามารถสร้างการกระทำของคุณเองได้)
Sergio Tulentsev

1
ดูเหมือนว่าจะส่งคืนผลลัพธ์ทั้งหมดที่มีสตริงหรือไม่ The
Brian Z

7
... หรือfind . -iname 'mystring*'สำหรับการค้นหาแบบตัวเล็ก
Frank Nocke

OP หมายถึงไดเรกทอรีเดียวดังนั้นให้แทรก-maxdepth 1ก่อน-nameเพื่อ จำกัด การค้นหาในโฟลเดอร์ปัจจุบัน
jacanterbury

27
ls | grep "^abc"  

จะทำให้คุณมีไฟล์ทั้งหมดเริ่มต้น (ซึ่งเป็นสิ่งที่จำเป็น OP เฉพาะ) abcที่มีอักขระย่อย
มันทำงานเฉพาะในไดเรกทอรีปัจจุบันในขณะที่findทำงานซ้ำในโฟลเดอร์ย่อย

หากต้องการใช้findเฉพาะไฟล์ที่ขึ้นต้นด้วยสตริงลอง

หา - ชื่อ 'abc' *


4

หากคุณต้องการ จำกัด การค้นหาเฉพาะไฟล์คุณควรพิจารณาใช้-type fในการค้นหา

พยายามใช้-inameสำหรับการค้นหาแบบคำนึงถึงขนาดตัวพิมพ์

ตัวอย่าง:

find /path -iname 'yourstring*' -type f

คุณสามารถทำการดำเนินการบางอย่างกับผลลัพธ์โดยไม่มีเครื่องหมายไปป์หรือ xargs

ตัวอย่าง:

ค้นหาไฟล์และแสดงขนาดเป็น MB

find /path -iname 'yourstring*' -type f -exec du -sm {} \;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.