Encontre arquivos com consultas do tipo SQL
Embora não tenda a substituir completamente find e ls tradicionais, o FSElect possui esses bons recursos:
.gitignore , .hgignore e .dockerignore suporte (experimental)Mais está em andamento!
cargo install fselect Pacote AUR, obrigado a @asm0dey
Pacote Aur bin, graças a @4Censord
fselect em nixpkgs , graças a @Filalex77
Construção estática com Musl.
Um binário estaticamente pré -compilado está disponível nos downloads do 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
Descrição mais detalhada. Veja os exemplos primeiro.
Encontre arquivos temporários ou de configuração (caminho completo e tamanho):
fselect size, path from /home/user where name = '*.cfg' or name = '*.tmp'
Os usuários do Windows podem omitir as cotações:
fselect size, path from C:Usersuser where name = *.cfg or name = *.tmp
Ou coloque todos os argumentos nas citações como esta:
fselect "name from /home/user/tmp where size > 0"
Pesquise em um nome de diretório com espaços (backticks também são suportados):
fselect "name from '/home/user/dir with spaces' where size > 0"
fselect "name from `/home/user/dir with spaces` where size > 0"
Ou simplesmente escapar das citações únicas:
fselect name from '/home/user/dir with spaces' where size gt 0
Especifique o tamanho do arquivo, obtenha um caminho absoluto e adicione -o aos 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 mais complexa:
fselect "name from /tmp where (name = *.tmp and size = 0) or (name = *.cfg and size > 1000000)"
Funções agregadas (você pode usar aparelhos encaracolados, se quiser, e até combiná -los com os parênteses regulares):
fselect "MIN(size), MAX{size}, AVG(size), SUM{size}, COUNT(*) from /home/user/Downloads"
Funções de formatação:
fselect "LOWER(name), UPPER(name), LENGTH(name), YEAR(modified) from /home/user/Downloads"
Obtenha o ano do arquivo mais antigo:
fselect "MIN(YEAR(modified)) from /home/user"
Use citações únicas se precisar abordar arquivos com espaços:
fselect "path from '/home/user/Misc stuff' where name != 'Some file'"
Expressões regulares de sabor de ferrugem são suportadas:
fselect name from /home/user where path =~ '.*Rust.*'
Negar expressões regulares:
fselect "name from . where path !=~ '^./config'"
Globs simples se expandem automaticamente e trabalham com = e != Operadores:
fselect name from /home/user where path = '*Rust*'
Classic Like:
fselect "path from /home/user where name like '%report-2018-__-__???'"
Operadores de correspondência exata para pesquisar com regexps desativados:
fselect "path from /home/user where name === 'some_*_weird_*_name'"
Encontre arquivos por data:
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'"
Seja mais específico para corresponder a todos os arquivos criados em intervalo entre as 15h e as 16h:
fselect path from /home/user where created = '2017-05-01 15'
E ainda mais 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 data e hora possíveis (encontre tudo atualizado desde 1º de maio):
fselect path from /home/user where modified gte 2017-05-01
O padrão é o diretório atual:
fselect path, size where name = '*.jpg'
Pesquise em vários locais:
fselect path from /home/user/oldstuff, /home/user/newstuff where name = '*.jpg'
Com profundidade mínima e/ou máxima especificada ( depth é 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 os symlinks:
fselect path, size from /home/user symlinks where name = '*.jpg'
Pesquisa dentro de arquivos (atualmente apenas as academias são suportadas):
fselect path, size from /home/user archives where name = '*.jpg'
Ou em combinação:
fselect size, path from /home/user depth 5 archives symlinks where name = '*.jpg' limit 100
.hgignore .gitignore
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'
Pesquise por dimensões da imagem:
fselect CONCAT(width, 'x', height), path from /home/user/photos where width gte 2000 or height gte 2000
Encontre imagens quadradas:
fselect path from /home/user/Photos where width = height
Encontre imagens com uma peça de nome conhecida, mas uma extensão desconhecida:
fselect path from /home/user/projects where name = "*RDS*" and width gte 1
Encontre arquivos mp3 de rap da velha escola:
fselect duration, path from /home/user/music where genre = Rap and bitrate = 320 and mp3_year lt 2000
Atalhos para extensões de arquivos comuns:
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
Maneira ainda mais simples de usar colunas 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
Encontre arquivos com permissões perigosas:
fselect mode, path from /home/user where other_write or other_exec
fselect mode, path from /home/user where other_all
Expressões simples do mundo ou mesmo expressões regulares no modo de arquivo são possíveis:
fselect mode, path from /home/user where mode = '*rwx'
fselect mode, path from /home/user where mode =~ '.*rwx$'
Encontre arquivos pelo UID ou GID do proprietário:
fselect uid, gid, path from /home/user where uid != 1000 or gid != 1000
Ou pelo nome do proprietário ou do grupo:
fselect user, group, path from /home/user where user = mike or group = mike
Encontre arquivos especiais:
fselect name from /usr/bin where suid
fselect path from /tmp where is_pipe
fselect path from /tmp where is_socket
Encontre arquivos com xattrs, verifique se o Xattr particular existe ou obtenha seu valor:
fselect "path, has_xattrs, has_xattr(user.test), xattr(user.test) from /home/user"
Inclua texto arbitrário como colunas:
fselect "name, ' has size of ', size, ' bytes'"
Resultados do grupo:
fselect "ext, count(*) from /tmp group by ext"
Resultados do pedido:
fselect path from /tmp order by size desc, name
fselect modified, fsize, path from ~ order by 1 desc, 3
Finalmente limite os resultados:
fselect name from /home/user/samples limit 5
Saída 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
Suportado pela Licença de código aberto da Ideia JetBrains