Questão Como listar diretórios e saída no Bash


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

Basicamente, esses arquivos 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 é chamado com -sub="$subs", onde subs é definido acima como subs="$directory/@sub1;$directory/@sub2;... etc

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

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


1


origem




Respostas:


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 maneira padronizada, executar 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 partida que comece com um @

-print0 imprima 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 pesquise subpastas)

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

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

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

Também vale a pena ler: find -exec option e find ..... {} +;


1



Com um pouco de mudança em torno da saída, funcionou! Muito obrigado! Você me salvou muitas horas. - Ksingh