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 ..... {} +;