Você está recebendo um erro argument list too long
porque não está citando seus argumentos. Há uma expansão ocorrendo - embora seja difícil dizer definitivamente o que é - sobre o valor de $file
que gera mais argumentos . Minha teoria é que um dos seus nomes de arquivo contém outro *
que novamente se expande para corresponder todos os seus arquivos correspondentes novamente.
Você pode fazer isso no shell - e você não precisa invocar um shell inteiro novo via find
para fazer isso.
Basta fazer isso:
for f in ./*.fasta
do signalp "$f" >"$f.txt"
done
... ver? As aspas duplas impedirão que o conteúdo da variável de shell iterável $f
seja interpretado de qualquer maneira, mas literalmente - mesmo que $f
contenha metacaracteres expansíveis do tipo.
No entanto, não é a melhor solução para grupos de arquivos de 18k. Ele funcionará , mas seria melhor se você pudesse agrupá-lo mais .
Como exemplo, vamos supor que haja algum tipo de ordem para os próprios nomes dos arquivos. Talvez eles tenham nomes como ...
aaa001.fasta
...
bbb001.fasta
E assim por diante. Nesse caso, você poderia fazer algo como:
for l in a b c d e f g h i j k l m n o p q r s t u v x y z
do for f in "./$l$l$l"*.fasta
do singalp "$f" >"$f.txt"
done; done
... e assim você não precisaria reter toda a lista de 18k na memória pela duração do loop.