Muito simples:
for i in *; do
echo "<$i>"
done
Isso usa a globalização de arquivos do bash. Uma classificação não é necessária, já que o bash classifica as expansões de nome de caminho.
De man bash
:
Pathname Expansion
After word splitting, unless the -f option has been set, bash scans each word for
the characters *, ?, and [. If one of these characters appears, then the word is
regarded as a pattern, and replaced with an alphabetically sorted list of file
names matching the pattern.
Exemplo de resultado:
$ touch 'fun bar1.txt' 'Foo bar2.tXT' 'fun fun.txt'
$ for i in *; do echo "<$i>"; done
<Foo bar2.tXT>
<fun bar1.txt>
<fun fun.txt>
Observe que a ordem de classificação depende de LC_COLLATE
(assim como o utilitário sort
). Se você quiser uma classificação insensível a maiúsculas e minúsculas, use LC_COLLATE=en_US.utf8
. Se você quiser uma classificação sensível a maiúsculas e minúsculas, use LC_COLLATE=C
.
também man bash
:
LC_COLLATE
This variable determines the collation order used when sorting the results
of pathname expansion, and determines the behavior of range expressions,
equivalence classes, and collating sequences within pathname expansion and
pattern matching.