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 executarsort
com o diretóriosorted
como 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*.txt
ou*.db
em vez de*
(por exemplo, para ignorar um arquivodesktop.ini
perdido que não deve ser processado). Nesse caso, você pode omitir[ ... ] &&
e iniciar a linha comsort
(deixar a linha intacta não deve atrapalhar). -
sort
suporta várias opções e você pode querer usar algumas delas, dependendo de como você precisa classificar. -
sort -u
de-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.