ฉันใช้ Ubuntu และฉันต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบันและไดเร็กทอรีย่อยที่ชื่อมีสตริง "John" ฉันรู้ว่าgrep
สามารถจับคู่เนื้อหาในไฟล์ได้ แต่ฉันไม่รู้ว่าจะใช้กับชื่อไฟล์อย่างไร ความช่วยเหลือใด ๆ จะได้รับการชื่นชม
ฉันใช้ Ubuntu และฉันต้องการค้นหาไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบันและไดเร็กทอรีย่อยที่ชื่อมีสตริง "John" ฉันรู้ว่าgrep
สามารถจับคู่เนื้อหาในไฟล์ได้ แต่ฉันไม่รู้ว่าจะใช้กับชื่อไฟล์อย่างไร ความช่วยเหลือใด ๆ จะได้รับการชื่นชม
คำตอบ:
ใช้คำสั่งค้นหา
find . -type f -name "*John*"
#!/bin/bash if [ -z $1 ]; then echo "Error: Specify pattern for search"; else /usr/bin/find . -type f -name "*$1*"; fi
จะช่วยให้คุณสามารถเรียกใช้F search-string
เป็นทางลัดที่สมบูรณ์แบบได้
[ -z "$1" ]
จะดีกว่านี้หน่อย
if [ -z ]
เป็นโมฆะแล้วการทดสอบจะกลายเป็น ฉันคิดว่านั่นจะเป็นข้อผิดพลาดทางไวยากรณ์ แต่ก็ใช้ได้ ฉันสามารถลดความซับซ้อนของรหัสของฉันได้นับจากนี้
มีคำตอบที่ถูกต้องให้แล้ว แต่เพื่อให้คุณได้เรียนรู้วิธีช่วยตัวเองฉันคิดว่าฉันจะโยนสิ่งที่เป็นประโยชน์ในรูปแบบที่แตกต่างออกไป หากคุณสามารถสรุปสิ่งที่คุณพยายามจะบรรลุได้ในคำเดียวมีคุณสมบัติช่วยเหลือที่ยอดเยี่ยมบน Linux
man -k <your search term>
สิ่งที่ทำคือการแสดงรายการคำสั่งทั้งหมดที่มีคำค้นหาของคุณในคำอธิบายสั้น ๆ โดยปกติจะมีโอกาสค่อนข้างดีที่คุณจะได้พบกับสิ่งที่คุณต้องการ ;)
บางครั้งผลลัพธ์นั้นอาจค่อนข้างท่วมท้นและฉันขอแนะนำให้ จำกัด ให้แคบลงเป็นไฟล์ปฏิบัติการแทนที่จะเป็นหน้าคนที่มีอยู่ทั้งหมดเช่น:
man -k find | egrep '\(1\)'
หรือหากคุณต้องการค้นหาคำสั่งที่ต้องการระดับสิทธิ์ที่สูงขึ้นเช่นนี้:
man -k find | egrep '\([18]\)'
find
คำสั่งจะใช้เวลานานเพราะมันจะสแกนไฟล์ที่แท้จริงในระบบแฟ้ม
วิธีที่เร็วที่สุดคือใช้locate
คำสั่งซึ่งจะให้ผลลัพธ์ทันที:
locate "John"
หากไม่พบคำสั่งคุณต้องติดตั้งmlocate
แพ็กเกจและรันupdatedb
คำสั่งก่อนเพื่อเตรียมฐานข้อมูลการค้นหาในครั้งแรก
ดูรายละเอียดเพิ่มเติมที่นี่: https://medium.com/@thucnc/the-fastest-way-to-find-files-by-filename-mlocate-locate-commands-55bf40b297ab
ใช้ ack มันง่าย เพียงพิมพ์ack <string to be searched>
นี่เป็นวิธีแก้ปัญหาที่ง่ายมากโดยใช้tree
คำสั่งในไดเร็กทอรีที่คุณต้องการค้นหา -f
แสดงพา ธ ไฟล์แบบเต็มและ|
ใช้เพื่อไพพ์เอาต์พุตของทรีgrep
เพื่อค้นหาไฟล์ที่มีสตริงfilename
ในชื่อ
tree -f | grep filename