Encuentre archivos con consultas similares a SQL
Si bien no tiende a reemplazar completamente find tradicional y ls , FSelect tiene estas buenas características:
.gitignore , .hgignore y .dockerignore Support (experimental)¡Más está en marcha!
cargo install fselect Paquete AUR, gracias a @asm0dey
Paquete Aur Bin, gracias a @4Censord
fselect en nixpkgs , gracias a @filalex77
Construcción estática con Musl.
Un binario precompilado estáticamente está disponible en las descargas de GitHub.
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
Descripción más detallada. Mira los ejemplos primero.
Encuentre archivos temporales o de configuración (ruta completa y tamaño):
fselect size, path from /home/user where name = '*.cfg' or name = '*.tmp'
Los usuarios de Windows pueden omitir las citas:
fselect size, path from C:Usersuser where name = *.cfg or name = *.tmp
O poner todos los argumentos en las citas como esta:
fselect "name from /home/user/tmp where size > 0"
Buscar dentro de un nombre de directorio con espacios (también son compatibles con los retroceso):
fselect "name from '/home/user/dir with spaces' where size > 0"
fselect "name from `/home/user/dir with spaces` where size > 0"
O simplemente escapar de las citas individuales:
fselect name from '/home/user/dir with spaces' where size gt 0
Especifique el tamaño del archivo, obtenga una ruta absoluta y agréguela a los resultados:
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
Consulta más compleja:
fselect "name from /tmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)"
Funciones agregadas (puede usar aparatos ortopédicos rizados si lo desea, e incluso combinarlas con los paréntesis regulares):
fselect "MIN(size), MAX{size}, AVG(size), SUM{size}, COUNT(*) from /home/user/Downloads"
Funciones de formato:
fselect "LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from /home/user/Downloads"
Obtenga el año del archivo más antiguo:
fselect "MIN(YEAR(modified)) from /home/user"
Use cotizaciones individuales si necesita abordar archivos con espacios:
fselect "path from '/home/user/Misc stuff' where name != 'Some file'"
Se admiten expresiones regulares de sabor a óxido:
fselect name from /home/user where path =~ '.*Rust.*'
Negue las expresiones regulares:
fselect "name from . where path !=~ '^./config'"
Los globos simples se expanden automáticamente y funcionan con = y != Operadores:
fselect name from /home/user where path = '*Rust*'
Clásico como:
fselect "path from /home/user where name like '%report-2018-__-__???'"
Operadores de coincidencia exactos para buscar con RegExps deshabilitado:
fselect "path from /home/user where name === 'some_*_weird_*_name'"
Encuentre archivos por fecha:
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'"
Sea más específico para que coincida con todos los archivos creados a intervalo entre las 3 p.m. y las 4pm:
fselect path from /home/user where created = '2017-05-01 15'
Y aún más específico:
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'
Intervalos de fecha y hora posibles (encuentre todo actualizado desde el 1 de mayo):
fselect path from /home/user where modified gte 2017-05-01
El valor predeterminado es el directorio actual:
fselect path, size where name = '*.jpg'
Buscar en múltiples ubicaciones:
fselect path from /home/user/oldstuff, /home/user/newstuff where name = '*.jpg'
Con una profundidad mínima y/o máxima especificada ( depth es sinónimo de 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'
Opcionalmente, siga los enlaces simbólicos:
fselect path, size from /home/user symlinks where name = '*.jpg'
Buscar dentro de los archivos (actualmente solo se admiten los arquitivos zip-arquitanos):
fselect path, size from /home/user archives where name = '*.jpg'
O en combinación:
fselect size, path from /home/user depth 5 archives symlinks where name = '*.jpg' limit 100
Habilitar .gitignore o .hgignore Support:
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'
Buscar por dimensiones de imagen:
fselect CONCAT(width, 'x', height), path from /home/user/photos where width gte 2000 or height gte 2000
Encuentra imágenes cuadradas:
fselect path from /home/user/Photos where width = height
Encuentre imágenes con una parte conocida de nombre pero extensión desconocida:
fselect path from /home/user/projects where name = "*RDS*" and width gte 1
Encuentra archivos mp3 de rap de la vieja escuela:
fselect duration, path from /home/user/music where genre = Rap and bitrate = 320 and mp3_year lt 2000
Atajos a extensiones de archivos comunes:
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
Incluso una forma más simple de usar columnas booleanas:
fselect path from /home/user where is_doc
fselect path from /home/user where is_image
fselect path from /home/user where is_video
Encuentre archivos con permisos peligrosos:
fselect mode, path from /home/user where other_write or other_exec
fselect mode, path from /home/user where other_all
Son posibles expresiones simples similares al globo o incluso expresiones regulares en el modo de archivo:
fselect mode, path from /home/user where mode = '*rwx'
fselect mode, path from /home/user where mode =~ '.*rwx$'
Encuentre archivos por el UID o GID del propietario:
fselect uid, gid, path from /home/user where uid != 1000 or gid != 1000
O por el nombre del propietario o grupo:
fselect user, group, path from /home/user where user = mike or group = mike
Encuentra archivos especiales:
fselect name from /usr/bin where suid
fselect path from /tmp where is_pipe
fselect path from /tmp where is_socket
Encuentre archivos con XATTRS, verifique si existe XATTR en particular o obtiene su valor:
fselect "path, has_xattrs, has_xattr(user.test), xattr(user.test) from /home/user"
Incluya texto arbitrario como columnas:
fselect "name, ' has size of ', size, ' bytes'"
Resultados del grupo:
fselect "ext, count(*) from /tmp group by ext"
Resultados del pedido:
fselect path from /tmp order by size desc, name
fselect modified, fsize, path from ~ order by 1 desc, 3
Finalmente limite los resultados:
fselect name from /home/user/samples limit 5
Salida de formato:
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
Con el apoyo de la licencia de código abierto de JetBrains Idea