Eu tenho uma estrutura de diretório como esta
data
|___
|
abc
|____incoming
def
|____incoming
|____processed
123
|___incoming
456
|___incoming
|___processed
Existe uma subpasta de entrada em todas as pastas dentro do diretório de dados. Quero obter todos os arquivos de todas as pastas e subpastas, exceto os diretórios def / entrando e 456 / entrando. Eu tentei com o seguinte comando
find /home/feeds/data -type d \( -name 'def/incoming' -o -name '456/incoming' -o -name arkona \) -prune -o -name '*.*' -print
mas não está funcionando como esperado.
Ravi
grep -v something
para excluir tudo o que você não querRespostas:
Isso funciona:
Explicação:
find /home/feeds/data
: começa a encontrar recursivamente a partir do caminho especificado-type f
: encontrar apenas arquivos-not -path "*def/incoming*"
: não inclui nada comdef/incoming
como parte de seu caminho-not -path "*456/incoming*"
: não inclui nada com456/incoming
como parte de seu caminhofonte
-path
corresponde a toda a string, então se você estiver fazendofind .
, então suas-path
strings precisam ser./path/to/directory/*
-not -path
definitivamente funcionará neste exemplo, masfind
ainda está iterando na estrutura de diretório e usando ciclos de cpu para iterar sobre todos esses diretórios / arquivos. para evitar afind
iteração nesses diretórios / arquivos (talvez haja milhões de arquivos lá), então você precisa usar-prune
(a-prune
opção é difícil de usar, no entanto).Apenas para fins de documentação: talvez seja necessário cavar mais fundo, pois há muitas constelações search'n'skip (como eu tive). Pode acabar
prune
sendo seu amigo, mas-not -path
não fará o que você espera.Portanto, este é um exemplo valioso de 15 exemplos de localização que excluem diretórios:
http://www.theunixschool.com/2012/07/find-command-15-examples-to-exclude.html
Para vincular à pergunta inicial, excluir finalmente funcionou para mim assim:
Então, se você deseja encontrar um arquivo e ainda excluir os caminhos, basta adicionar
| grep myFile.txt
.Pode depender também da sua versão de localização. Entendo:
fonte
-name
corresponde apenas ao nome do arquivo, não ao caminho inteiro. Em-path
vez disso, você deseja usar para as partes em que está removendo os diretórios, comodef/incoming
.fonte
fonte
find ... -print0
em conjunto com um posteriorxargs -0
Seguindo este Como excluir um diretório em find. comando :
fonte