
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
, @sub3
e à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 d
filtra apenas diretórios (sem arquivos)
-name '@*'
qualquer partida que comece com @
-print0
imprima o resultado para padronizar. -print também funcionará, mas -print0 faz coisas especiais no caso de espaços, etc.
-maxdepth 1
Não pesquise subpastas)
Resultado find . -type d -name '@*' -print0 -maxdepth 1
da 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 ..... {} +;