Como listar diretórios e saída no Bash

1

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

Praticamente, esses arquivos do bash exigem uma lista de pastas dentro do meu $directory , que variam de @sub1 , @sub2 , @sub3 e às vezes vão até 30. Todas as subpastas são anexadas com o símbolo @ .

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

Eu preciso manter a mesma formatação para a saída, como manter o modo como o executável é criado.

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

    
por Ksingh 05.09.2016 / 18:30

1 resposta

1

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 ..

Encontrando coisas e imprimindo-as no padrão, executando algo com elas e similares pode ser feito com find . Use isso em vez de tentar analisar a saída ls.

Primeiro argumento é qual pasta pesquisar (por exemplo, find . para o diretório atual)

-type d filtra apenas para diretórios (sem arquivos)

-name '@*' qualquer correspondência que comece com @

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

-maxdepth 1 Não pesquisar subpastas)

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

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

Note que estes são prefixados por ./, o que pode ou não ser um problema para você.

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

    
por 05.09.2016 / 18:45