Excluir arquivos ocultos ao pesquisar com o Unix / Linux find?


35

Com quais opções eu preciso usar findpara excluir arquivos ocultos?


4
Além disso: o motivo pelo qual não há suporte especial para esta tarefa é que a única coisa especial nos arquivos nomeados com um '.' Inicial é que não são listados por, a lsmenos que seja especificamente solicitado: eles são arquivos completamente comuns em todos os aspectos, é apenas isso que lspermite ignorá-los por padrão.
precisa

2
Pergunta: você quer esconder algo assim .hidden/visible.txt?
Keith Thompson

Respostas:


14

Encontrei isso aqui :

find . \( ! -regex '.*/\..*' \) -type f -name "whatever"

Por que não apenas \( ! -name '.*' \)?
grawity

@rawity Acabei de descobrir isso, não sei completamente como isso funciona. O seu não ocultaria apenas arquivos ocultos, mas diretórios ocultos e todo o seu conteúdo secundário e arquivos ocultos em subpastas?
Jarvin

5
Não, não seria: / Mas \( ! -path '*/.*' \)seria.
grawity

@rawity Ya, acho que fiz uma suposição sobre o que o OP queria ... Sua solução de nome é provavelmente a mais próxima do que eles estavam pedindo.
Jarvin

@ grawity & Dan: não é (! -caminho '^. *') ?? suas soluções ignorarão qualquer arquivo que tenha um '.' em qualquer lugar no nome do arquivo como a.exe, b.out etc ....
Software Mechanic

13

Parece que o padrão glob de negação não é bem conhecido. Então você pode usar:

find . -name "[!.]*"

12

Isso não responde à sua pergunta, mas para a tarefa de encontrar arquivos não ocultos, gosto de deixar encontrar todos os arquivos e filtrá-los com grep.

find . -type f | grep -v '/\.'

Semelhante à sua abordagem, mas talvez um pouco mais simples.


Este foi o único dos forros que funcionou para mim.
entpnerd 8/08/16

7

Tente o seguinte finduso:

find . -type f -not -path '*/\.*'

O que ignoraria todos os arquivos ocultos (arquivos e diretórios começando com um ponto).


1

Escrevi um script chamado, findnhque acredito que lida com certos casos extremos melhor do que as respostas a essa pergunta que consegui encontrar na web.

#!/bin/bash

declare -a paths

while [ $# -ne 0 ]; do
  case "$1" in -*) break ;; esac
  paths+=("$1")
  shift
done

find "${paths[@]}" \( -name . -o -name .. -o \! \( -name '.*' -prune \) \) "$@"

Por exemplo, você pode encontrar arquivos e diretórios não ocultos dentro de um diretório oculto especificado explicitamente com um comando como findnh ~/.hiddendir/, que será exibido, ~/.hiddendir/filemas não ~/.hiddendir/.superhiddenfile.


1
Bom pedaço de codificação. Exceto que, quando tento findnh ~/.hiddendir/, não recebo nada. Fora isso, como isso é diferente ! -path '*/.*'e find … | grep -v '/\.'?
G-Man diz 'Reinstate Monica'

1

Se você objetivos é finde grep, ripgrepnão exclui arquivos ocultos por padrão, por exemplo,

rg --files

--files Imprima cada arquivo que seria pesquisado sem realmente executar a pesquisa.


1

fd

Use fd, uma alternativa simples, muito mais rápida e fácil de usar find. Por padrão, ele:

  • Ignora diretórios e arquivos ocultos, por padrão.
  • Ignora padrões do seu .gitignore, por padrão.

Verifique a análise de benchmark .


1

Para encontrar arquivos ocultos:

find -name '[.]*'

Para encontrar arquivos visíveis:

find -name '[!.]*'

É simples assim.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.