Qual é a opção '-mindepth' neste comando?

0

Eu sou um iniciante no comando find do bash e estou tentando entendê-lo, pois ele faz parte de um código que estou usando. No código, o comando em questão é -

find -L $RAW_DIR -mindepth 2 -maxdepth 2 -name "*.bam" -o -name "*.sam" | wc -l

Eu tenho tentado entender esse comando pesquisando seus componentes. De fato, acho que está tentando encontrar o número de arquivos que terminam com .bam ou .sam . Acho que -maxdepth 2 significa procurar por esses arquivos nessa pasta e em sua subpasta imediata.

O que eu não entendo é o que o mindepth -2 faz nesse caso. Eu olhei para cima mindepth e a explicação dada em todo lugar é -

" Não aplique nenhum teste ou ação em níveis menores que os níveis (um inteiro não negativo). '-mindepth 1' significa processar todos os arquivos, exceto os argumentos da linha de comando. "

Para mim esta explicação não é muito clara. Assim como maxdepth -2 significa procurar por subpastas até uma profundidade de 2, o que mindepth -2 significa correspondentemente, em linguagem simples?

Além disso, se mindepth for exatamente o oposto do maxdepth em termos de direção (o que faria sentido intuitivo), como entender o fato de que executar o comando acima em uma pasta que possui um arquivo .bam ? para a saída 0 , enquanto omitir a parte mindeap do comando leva à saída 1 ?

    
por user1993 09.07.2018 / 00:17

2 respostas

2

Profundidade 0 são os argumentos da linha de comando, 1 os arquivos contidos neles, 2 os arquivos contidos na profundidade 1, etc.

-mindepth N diz para processar apenas arquivos que estão em profundidade > = N, semelhante a como -maxdepth M diz para processar apenas arquivos estão em profundidade < = M. Então, se você quiser os arquivos que estão em profundidade 2 exatamente, você precisa usar ambos.

Seu comando corresponderia a $RAW_DIR/foo/bam.bam , mas não a $RAW_DIR/bar.bam .

Experimente, por exemplo

$ mkdir -p a/b/c/d
$ find ./a -maxdepth 2
./a
./a/b
./a/b/c
$ find ./a -mindepth 2
./a/b/c
./a/b/c/d
$ find ./a -maxdepth 2 -mindepth 2
./a/b/c

maxdepth com um argumento negativo não significa nada:

$ find ./a -maxdepth -2
find: Expected a positive decimal integer argument to -maxdepth, but got ‘-2’
    
por 09.07.2018 / 00:28
1

Os parâmetros -mindepth 2 e -maxdepth 2 juntos limitam o escopo de find aos diretórios na profundidade dois de $RAW_DIR .

O comando find é idêntico ao comando bash shell

printf '%s\n' "$RAW_DIR"/*/*.{sam,bam} | wc -l

Isso contaria o número de arquivos .sam e .bam nos subdiretórios de $RAW_DIR . Ele ainda daria a contagem de 1 para nenhum arquivo, mas assim como o comando find , ele contaria um arquivo com uma nova linha incorporada em seu nome como dois arquivos.

Para um comando find absolutamente correto, um que conta nomes de arquivos contendo novas linhas incorporadas como um arquivo:

find . "$RAW_DIR" -type f -mindepth 2 -maxdepth 2 \
    '(' -name '*.bam' -o -name '*.sam' ')' -exec echo x ';' | wc -l

Isso produziria um x em uma linha por conta própria para cada arquivo encontrado que correspondesse aos critérios, e o wc -l contaria esses x-es.

    
por 09.07.2018 / 08:58

Tags