Alterar a profundidade para encontrar ao pesquisar diretórios

2

Gostaria de encontrar todos os diretórios contendo .txt arquivos. Mas preciso imprimir um nível acima na saída.

Por exemplo, estou usando find para pesquisar recursivamente por .txt arquivos no diretório atual. Então apenas os diretórios contendo tais arquivos são mostrados.

find . -name "*.txt" -printf '%h\n'

saídas para (por exemplo)

./out/data
./out/data
./output/data

Então, eu gostaria de melhorar o uso de find para:

  1. não mostra dirs repetidos (acho que acontece porque há 2% do arquivo.txt)

  2. Gostaria de imprimir apenas o primeiro nível, ou seja, apenas ./out/ e ./output/

por Sigur 06.01.2017 / 02:57

3 respostas

3

Pode haver mais find -centric, mas você pode fazer isso com algumas outras ferramentas, ajudando:

find . -name '*.txt' -printf '%h\n' | cut -f1,2 -d/ | sort -u

Ou eu acho que poderíamos salvar um processo e usar awk like

find . -name '*.txt' -printf '%h\n' | awk -F/ '{matched[$1"/"$2]=1} END {for(dir in matched) {print dir}}'
    
por 06.01.2017 / 03:16
1

por que não canalizar seu resultado para algumas outras ferramentas para processamento posterior, como este:

find . -name "*.txt" -printf '%h\n'| sort | uniq | cut -d'/' -f1,2   
    
por 06.01.2017 / 03:14
1

Use sed para manter apenas o primeiro nome de diretório no caminho e, em seguida, sort e mantenha apenas a primeira linha de uma execução igual:

find . -name "*.txt" -printf '%h\n' |
sed -e 's#^\(\./[^/]*\).*##' |
sort -u
    
por 06.01.2017 / 03:14

Tags