ค้นหาไฟล์ที่มีแบบสอบถามเหมือน SQL
แม้ว่ามันจะไม่ได้แทนที่ find แบบดั้งเดิมและ ls อย่างเต็มที่ แต่ fselect มีคุณสมบัติที่ดีเหล่านี้:
.gitignore , .hgignore และ .dockerignore สนับสนุน (ทดลอง)เพิ่มเติมกำลังดำเนินการ!
cargo install fselect แพ็คเกจ AUR ขอบคุณ @ASM0DEY
แพ็คเกจ aur bin ขอบคุณ @4censord
fselect ใน nixpkgs ขอบคุณ @filalex77
สร้างแบบคงที่ด้วย musl
ไบนารีคอมไพล์แบบล่วงหน้าแบบคงที่สามารถดูได้ที่ GitHub Downloads
winget install -e --id fselect.fselect choco install fselect scoop install fselect brew install fselect sudo port selfupdate
sudo port install fselect
fselect [ARGS] COLUMN[, COLUMN...] [from ROOT[, ROOT...]] [where EXPR] [group by COLUMNS] [order by COLUMNS] [limit N] [into FORMAT]
fselect -i
คำอธิบายโดยละเอียดเพิ่มเติม ดูตัวอย่างก่อน
ค้นหาไฟล์ชั่วคราวหรือกำหนดค่า (เส้นทางเต็มและขนาด):
fselect size, path from /home/user where name = '*.cfg' or name = '*.tmp'
ผู้ใช้ Windows อาจละเว้นคำพูด:
fselect size, path from C:Usersuser where name = *.cfg or name = *.tmp
หรือใส่ข้อโต้แย้งทั้งหมดลงในคำพูดเช่นนี้:
fselect "name from /home/user/tmp where size > 0"
ค้นหาภายในชื่อไดเรกทอรีที่มีช่องว่าง (รองรับ backticks ด้วย):
fselect "name from '/home/user/dir with spaces' where size > 0"
fselect "name from `/home/user/dir with spaces` where size > 0"
หรือเพียงแค่หลบหนีคำพูดเดียว:
fselect name from '/home/user/dir with spaces' where size gt 0
ระบุขนาดไฟล์รับเส้นทางสัมบูรณ์และเพิ่มลงในผลลัพธ์:
cd /home/user
fselect size, abspath from ./tmp where size gt 2g
fselect fsize, abspath from ./tmp where size = 5m
fselect hsize, abspath from ./tmp where size lt 8k
fselect name, size from ./tmp where size between 5mb and 6mb
แบบสอบถามที่ซับซ้อนมากขึ้น:
fselect "name from /tmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)"
ฟังก์ชั่นการรวม (คุณสามารถใช้วงเล็บปีกกาได้หากคุณต้องการและรวมเข้ากับวงเล็บปกติ):
fselect "MIN(size), MAX{size}, AVG(size), SUM{size}, COUNT(*) from /home/user/Downloads"
ฟังก์ชั่นการจัดรูปแบบ:
fselect "LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from /home/user/Downloads"
รับปีของไฟล์ที่เก่าแก่ที่สุด:
fselect "MIN(YEAR(modified)) from /home/user"
ใช้ใบเสนอราคาเดียวหากคุณต้องการที่อยู่ไฟล์ที่มีช่องว่าง:
fselect "path from '/home/user/Misc stuff' where name != 'Some file'"
รองรับการแสดงออกของรสชาติสนิมเป็นประจำ:
fselect name from /home/user where path =~ '.*Rust.*'
ลบล้างการแสดงออกปกติ:
fselect "name from . where path !=~ '^./config'"
Globs ง่าย ๆ ขยายโดยอัตโนมัติและทำงานกับ = และ != ตัวดำเนินการ:
fselect name from /home/user where path = '*Rust*'
คลาสสิกชอบ:
fselect "path from /home/user where name like '%report-2018-__-__???'"
ตัวดำเนินการจับคู่ที่แน่นอนเพื่อค้นหาด้วยการปิดใช้งาน regexps:
fselect "path from /home/user where name === 'some_*_weird_*_name'"
ค้นหาไฟล์ตามวันที่:
fselect path from /home/user where created = 2017-05-01
fselect path from /home/user where modified = today
fselect path from /home/user where accessed = yesterday
fselect "path from /home/user where modified = 'apr 1'"
fselect "path from /home/user where modified = 'last fri'"
มีความเฉพาะเจาะจงมากขึ้นในการจับคู่ไฟล์ทั้งหมดที่สร้างขึ้นในช่วงเวลา 15.00 น. ถึง 16.00 น.:
fselect path from /home/user where created = '2017-05-01 15'
และเฉพาะเจาะจงมากขึ้น:
fselect path from /home/user where created = '2017-05-01 15:10'
fselect path from /home/user where created = '2017-05-01 15:10:30'
ช่วงเวลาและช่วงเวลาที่เป็นไปได้ (ค้นหาทุกสิ่งที่อัปเดตตั้งแต่วันที่ 1 พฤษภาคม):
fselect path from /home/user where modified gte 2017-05-01
ค่าเริ่มต้นคือไดเรกทอรีปัจจุบัน:
fselect path, size where name = '*.jpg'
ค้นหาภายในหลายสถานที่:
fselect path from /home/user/oldstuff, /home/user/newstuff where name = '*.jpg'
ด้วยความลึกขั้นต่ำและ/หรือสูงสุดที่ระบุ ( depth เป็นคำพ้องความหมายสำหรับ maxdepth ):
fselect path from /home/user/oldstuff depth 5 where name = '*.jpg'
fselect path from /home/user/oldstuff mindepth 2 maxdepth 5, /home/user/newstuff depth 10 where name = '*.jpg'
เลือกติดตาม Symlinks:
fselect path, size from /home/user symlinks where name = '*.jpg'
ค้นหาภายในคลังเก็บ (ปัจจุบันรองรับเฉพาะ zip-archives):
fselect path, size from /home/user archives where name = '*.jpg'
หรือรวมกัน:
fselect size, path from /home/user depth 5 archives symlinks where name = '*.jpg' limit 100
เปิดใช้งาน .gitignore หรือ .hgignore สนับสนุน:
fselect size, path from /home/user/projects gitignore where name = '*.cpp'
fselect size, path from /home/user/projects git where name = '*.cpp'
fselect size, path from /home/user/projects hgignore where name = '*.py'
ค้นหาตามขนาดภาพ:
fselect CONCAT(width, 'x', height), path from /home/user/photos where width gte 2000 or height gte 2000
ค้นหาภาพสี่เหลี่ยม:
fselect path from /home/user/Photos where width = height
ค้นหาภาพที่มีส่วนชื่อที่รู้จัก แต่ไม่รู้จักส่วนขยาย:
fselect path from /home/user/projects where name = "*RDS*" and width gte 1
ค้นหาไฟล์ MP3 แร็พเก่าของโรงเรียน:
fselect duration, path from /home/user/music where genre = Rap and bitrate = 320 and mp3_year lt 2000
ทางลัดไปยังส่วนขยายไฟล์ทั่วไป:
fselect path from /home/user where is_archive = true
fselect path, mime from /home/user where is_audio = 1
fselect path, mime from /home/user where is_book != false
แม้แต่วิธีที่ง่ายกว่าในการใช้คอลัมน์บูลีน:
fselect path from /home/user where is_doc
fselect path from /home/user where is_image
fselect path from /home/user where is_video
ค้นหาไฟล์ที่มีสิทธิ์อันตราย:
fselect mode, path from /home/user where other_write or other_exec
fselect mode, path from /home/user where other_all
การแสดงออกเหมือนลูกโลกอย่างง่ายหรือแม้แต่การแสดงออกปกติในโหมดไฟล์เป็นไปได้:
fselect mode, path from /home/user where mode = '*rwx'
fselect mode, path from /home/user where mode =~ '.*rwx$'
ค้นหาไฟล์โดย UID หรือ GID ของเจ้าของ:
fselect uid, gid, path from /home/user where uid != 1000 or gid != 1000
หรือตามชื่อของเจ้าของหรือกลุ่ม:
fselect user, group, path from /home/user where user = mike or group = mike
ค้นหาไฟล์พิเศษ:
fselect name from /usr/bin where suid
fselect path from /tmp where is_pipe
fselect path from /tmp where is_socket
ค้นหาไฟล์ที่มี XATTRs ตรวจสอบว่ามี XATTR โดยเฉพาะหรือได้รับค่า:
fselect "path, has_xattrs, has_xattr(user.test), xattr(user.test) from /home/user"
รวมข้อความโดยพลการเป็นคอลัมน์:
fselect "name, ' has size of ', size, ' bytes'"
ผลลัพธ์กลุ่ม:
fselect "ext, count(*) from /tmp group by ext"
ผลการสั่งซื้อ:
fselect path from /tmp order by size desc, name
fselect modified, fsize, path from ~ order by 1 desc, 3
ในที่สุดก็ จำกัด ผลลัพธ์:
fselect name from /home/user/samples limit 5
รูปแบบเอาต์พุต:
fselect size, path from /home/user limit 5 into json
fselect size, path from /home/user limit 5 into csv
fselect size, path from /home/user limit 5 into html
MIT/APACHE-2.0
สนับสนุนโดย Jetbrains Idea Open Source License