Sim, você pode fazer isso com for . Mesmo se houver "alguma maneira mais simples de fazer isso com sort " (mas eu não penso assim), isso também é bem simples:
# cd to the directory you want to process
mkdir sorted
for file in *;
do
printf 'Processing %s\n' "$file"
[ -f "$file" ] && sort -u "$file" > "./sorted/$file"
done
Notas:
-
for file in *não processa arquivos em subdiretórios. -
printfé apenas para relatar o progresso. Na verdade, ele deve ser colocado após[ ... ](veja abaixo), mas não quero complicar demais o código. Você pode simplesmente remover a linhaprintf, se quiser que a coisa toda fique em silêncio. -
[ -f "$file" ]verifica se$fileé um arquivo regular. Com o padrão mais geral (por exemplo,*), precisamos dessa condição pelo menos para evitar executarsortcom o diretóriosortedcomo um argumento (isso causaria um erro, inofensivo, mas não elegante). Provavelmente, esse teste não será necessário se você usar um glob mais específico como*.txtou*.dbem vez de*(por exemplo, para ignorar um arquivodesktop.iniperdido que não deve ser processado). Nesse caso, você pode omitir[ ... ] &&e iniciar a linha comsort(deixar a linha intacta não deve atrapalhar). -
sortsuporta várias opções e você pode querer usar algumas delas, dependendo de como você precisa classificar. -
sort -ude-duplica entradas logo após classificá-las, e quando já estiver usandosorté uma alternativa menos redundante ao uso do comandouniq.
Se você precisasse escolher arquivos de acordo com condições mais complexas do que um simples glob, find poderia ser melhor para começar. Para sua tarefa atual for deve estar bem.