ยูทิลิตี fsq
('file system query' - อ่านว่า 'fisk') เป็นเครื่องมือสำหรับทำการสืบค้นเฉพาะกิจกับระบบไฟล์โดยใช้ภาษานิพจน์ที่คล้ายกับ SQL สิ่งนี้มีประโยชน์สำหรับการค้นหาไฟล์ที่ตรงกับเกณฑ์บางอย่างโดยไม่ต้องเขียนสคริปต์เพียงครั้งเดียว
ดาวน์โหลดไบนารีสำหรับแพลตฟอร์มของคุณและเพิ่มลงในพาธบรรทัดคำสั่งของคุณ
fsq
รับอาร์กิวเมนต์เดียว: นิพจน์ นิพจน์นี้ประกอบด้วยส่วนต่างๆ ดังต่อไปนี้:
<attribute list> [not] in <locations> where <conditions>
หากต้องการค้นหาไฟล์ทั้งหมดซ้ำในไดเร็กทอรี '/data' ที่ขึ้นต้นด้วยอักขระ 'hello' และมีขนาดใหญ่กว่า 5 mb คุณสามารถใช้แบบสอบถามต่อไปนี้:
fsq "name in '/data' where name startswith 'hello' and size > 5m"
หากละเว้นตำแหน่ง (ในกรณีข้างต้น '/data') fsq
จะใช้ค่าเริ่มต้นเป็นไดเร็กทอรีปัจจุบัน:
fsq "name where name startswith 'hello' and size > 5m"
สามารถระบุสถานที่หลายแห่งได้เช่นกัน:
fsq "name in '/opt', '/media' where size > 5m"
สถานที่อาจถูกยกเว้นด้วย ในตัวอย่างต่อไปนี้ ตำแหน่งทั้งหมดภายใต้ไดเร็กทอรีปัจจุบัน ยกเว้น .git
จะถูกค้นหาไฟล์ที่มีสตริง "implements MyInterface":
fsq "path not in '.git' where content contains 'implements MyInterface'"
รายการแอ็ตทริบิวต์ระบุว่าแอ็ตทริบิวต์ใดที่พิมพ์เป็นมาตรฐานโดย fsq
ในกรณีข้างต้น นี่เป็นเพียงชื่อไฟล์ ('ชื่อ') ตัวอย่างต่อไปนี้จะพิมพ์ทั้งเส้นทางไปยังไฟล์และขนาด (เป็นไบต์):
fsq "path,size in '/opt' where size > 5m"
name
path
size
fsize
(สามารถใช้ในรายการแอตทริบิวต์ แต่ไม่สามารถสอบถามได้)content
(สามารถสืบค้นเนื้อหาได้ แต่ไม่สามารถเพิ่มลงในรายการแอตทริบิวต์สำหรับการพิมพ์)modified
(รูปแบบ: 'MM/DD/YYYY' หรือ 'MM/DD/YYYY hh:mm:ss')sha1
sha256
md5
stats
(สามารถใช้ในรายการแอตทริบิวต์ แต่ไม่สามารถสอบถามได้)<
<=
>
>=
=
!=
startswith
endswith
isdir
(ตัวดำเนินการนี้ไม่รับข้อโต้แย้งใด ๆ )isfile
(ตัวดำเนินการนี้ไม่รับข้อโต้แย้งใด ๆ )contains
ignorecase
(ต้องตามด้วย '=', '!=', 'startswith', 'endswith' หรือ 'contains')matches
(การจับคู่นิพจน์ปกติ)วงเล็บเช่นเดียวกับตัวดำเนินการเชิงตรรกะ หรือ และ และ ไม่ สามารถใช้เพื่อจัดกลุ่มเงื่อนไขได้ ตัวอย่างเช่น:
fsq "name in '.' where name startswith 'hello' or (isdir and not name startswith 'world')"
ตัวระบุขนาดต่อไปนี้สามารถผนวกเข้ากับค่าจำนวนเต็มเพื่อระบุหน่วยที่ไม่ใช่ค่าเริ่มต้น สิ่งเหล่านี้มีประโยชน์อย่างยิ่งเมื่อระบุขนาดไฟล์ในนิพจน์ หากไม่มีตัวระบุขนาดต่อท้ายจำนวนเต็ม fsq
จะเปรียบเทียบค่าเป็นไบต์
ตัวอย่างเช่น หากต้องการค้นหาไฟล์ทั้งหมดที่มีขนาดใหญ่กว่า 10 กิโลไบต์และน้อยกว่า 1 เมกะไบต์ ให้ทำดังนี้
fsq "path where size > 10k and size < 1m"
จำเป็นต้องใช้คอมไพเลอร์ go
เพื่อสร้าง fsq
หากคุณ make
ติดตั้งแล้ว สามารถติดตั้ง fsq
ด้วย:
make install
มิฉะนั้น จะต้องรันคำสั่งต่อไปนี้ขณะอยู่ในไดเร็กทอรี fsq
:
go get golang.org/x/tools/cmd/goyacc
go install golang.org/x/tools/cmd/goyacc
goyacc parser.y
go install