Trouver des fichiers avec des requêtes de type SQL
Bien qu'il n'ait pas tendance à remplacer complètement find traditionnelle et ls , Felect a ces belles caractéristiques:
.gitignore , .hgignore et .dockerignorePlus est en cours!
cargo install fselect Package AUR, grâce à @ asm0dey
Package Aur Bin, grâce à @ 4censord
fselect dans nixpkgs , grâce à @ filalex77
Construction statique avec Musl.
Un binaire précompilé statiquement est disponible chez 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
Description plus détaillée. Regardez d'abord les exemples.
Trouver des fichiers temporaires ou de configuration (chemin complet et taille):
fselect size, path from /home/user where name = '*.cfg' or name = '*.tmp'
Les utilisateurs de Windows peuvent omettre les citations:
fselect size, path from C:Usersuser where name = *.cfg or name = *.tmp
Ou mettez tous les arguments dans les citations comme ceci:
fselect "name from /home/user/tmp where size > 0"
Rechercher dans un nom de répertoire avec des espaces (les backticks sont également pris en charge):
fselect "name from '/home/user/dir with spaces' where size > 0"
fselect "name from `/home/user/dir with spaces` where size > 0"
Ou échapper simplement aux citations simples:
fselect name from '/home/user/dir with spaces' where size gt 0
Spécifiez la taille du fichier, obtenez un chemin absolu et ajoutez-le aux résultats:
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
Query plus complexe:
fselect "name from /tmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)"
Fonctions agrégées (vous pouvez utiliser des accolades bouclées si vous le souhaitez, et même les combiner avec les parenthèses régulières):
fselect "MIN(size), MAX{size}, AVG(size), SUM{size}, COUNT(*) from /home/user/Downloads"
Fonctions de formatage:
fselect "LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from /home/user/Downloads"
Obtenez l'année du fichier le plus ancien:
fselect "MIN(YEAR(modified)) from /home/user"
Utilisez des devis uniques si vous devez aborder les fichiers avec des espaces:
fselect "path from '/home/user/Misc stuff' where name != 'Some file'"
Des expressions régulières de saveur de rouille sont soutenues:
fselect name from /home/user where path =~ '.*Rust.*'
Nier les expressions régulières:
fselect "name from . where path !=~ '^./config'"
Les globs simples se développent automatiquement et fonctionnent avec = et != Opérateurs:
fselect name from /home/user where path = '*Rust*'
Classique comme:
fselect "path from /home/user where name like '%report-2018-__-__???'"
Opérateurs de correspondance exacts pour rechercher avec RegexPs Disabled:
fselect "path from /home/user where name === 'some_*_weird_*_name'"
Trouver des fichiers par date:
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'"
Être plus précis pour faire correspondre tous les fichiers créés à l'intervalle entre 15h et 16h:
fselect path from /home/user where created = '2017-05-01 15'
Et encore plus spécifique:
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'
Intervalles de date et de temps possible (trouvez tout mis à jour depuis le 1er mai):
fselect path from /home/user where modified gte 2017-05-01
La valeur par défaut est le répertoire actuel:
fselect path, size where name = '*.jpg'
Recherche dans plusieurs emplacements:
fselect path from /home/user/oldstuff, /home/user/newstuff where name = '*.jpg'
Avec une profondeur minimale et / ou maximale spécifiée ( depth est un synonyme 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'
Suivez éventuellement Symlinks:
fselect path, size from /home/user symlinks where name = '*.jpg'
Recherche dans les archives (actuellement seules les zip-archives sont prises en charge):
fselect path, size from /home/user archives where name = '*.jpg'
Ou en combinaison:
fselect size, path from /home/user depth 5 archives symlinks where name = '*.jpg' limit 100
Activer .gitignore ou .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'
Recherche par dimensions d'image:
fselect CONCAT(width, 'x', height), path from /home/user/photos where width gte 2000 or height gte 2000
Trouver des images carrées:
fselect path from /home/user/Photos where width = height
Trouvez des images avec une partie de nom connu mais une extension inconnue:
fselect path from /home/user/projects where name = "*RDS*" and width gte 1
Trouver des fichiers MP3 de RAP à l'ancienne:
fselect duration, path from /home/user/music where genre = Rap and bitrate = 320 and mp3_year lt 2000
Raccourcis vers les extensions de fichiers courantes:
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
Une façon encore plus simple d'utiliser des colonnes booléennes:
fselect path from /home/user where is_doc
fselect path from /home/user where is_image
fselect path from /home/user where is_video
Trouver des fichiers avec des autorisations dangereuses:
fselect mode, path from /home/user where other_write or other_exec
fselect mode, path from /home/user where other_all
Des expressions simples de type glob ou même des expressions régulières en mode fichier sont possibles:
fselect mode, path from /home/user where mode = '*rwx'
fselect mode, path from /home/user where mode =~ '.*rwx$'
Trouver des fichiers par UID du propriétaire ou GID:
fselect uid, gid, path from /home/user where uid != 1000 or gid != 1000
Ou par le nom du propriétaire ou du groupe:
fselect user, group, path from /home/user where user = mike or group = mike
Trouver des fichiers spéciaux:
fselect name from /usr/bin where suid
fselect path from /tmp where is_pipe
fselect path from /tmp where is_socket
Trouvez des fichiers avec XATTRS, vérifiez si un XATTR particulier existe ou obtenez sa valeur:
fselect "path, has_xattrs, has_xattr(user.test), xattr(user.test) from /home/user"
Inclure le texte arbitraire comme colonnes:
fselect "name, ' has size of ', size, ' bytes'"
Résultats du groupe:
fselect "ext, count(*) from /tmp group by ext"
Résultats de la commande:
fselect path from /tmp order by size desc, name
fselect modified, fsize, path from ~ order by 1 desc, 3
Limitez enfin les résultats:
fselect name from /home/user/samples limit 5
Sortie de format:
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
Soutenu par la licence open source de JetBrains Idea