Como listar diretórios e saída no Bash

Como listar diretórios e saída no Bash

Quero pegar uma lista de diretórios dentro de uma pasta e gerar a lista em um executável, que os use para executar algo.

Praticamente, esses arquivos bash requerem uma lista de pastas dentro de my $directory, que variam de @sub1, @sub2, @sub3e às vezes vão até 30. Todas as subpastas são anexadas ao @símbolo.

Atualmente, adiciono manualmente as subpastas à minha lista e sou chamado com -sub="$subs", onde subs é definido acima como subs="$directory/@sub1;$directory/@sub2;... etc

Preciso manter a mesma formatação para a saída, para acompanhar a forma como o executável é construído.

Qual é a melhor maneira de automatizar isso? Desculpe se é um pouco estranho, minha primeira pergunta aqui.

Responder1

Solução possível:find . -type d -name '@*' -print0 -maxdepth 1 | xargs -0 yourprog

Pasta vazia para começar, algumas pastas chamadas @subX, um arquivo que não queremos.

mkdir test
cd test
mkdir @sub1
mkdir @sub2
mkdir @sub3
mkdir subway
touch testfile
cd \@sub2
touch bar
mkdir @test
cd ..

Encontrar coisas e imprimi-las de acordo com o padrão, executar algo com elas e similares pode ser feito com find. Use isso em vez de tentar analisar a saída ls.

O primeiro argumento é qual pasta procurar ( find .por exemplo, o diretório atual)

-type dfiltra apenas diretórios (sem arquivos)

-name '@*'qualquer partida que comece com @

-print0imprima o resultado para padronizar. -print também funcionará, mas -print0 faz coisas especiais no caso de espaços, etc.

-maxdepth 1Não pesquise subpastas)

Resultado find . -type d -name '@*' -print0 -maxdepth 1da configuração acima:

./@sub1./@sub2./@sub3

Observe que eles são prefixados por ./ o que pode ou não ser um problema para você.

Também vale a pena ler: opção -exec do find e find ..... {} +;

informação relacionada