There are lots of small little quirks to the *nix shells; this is just one of them.
If you want to list the files in a directory, then
ls will list them all for you, in alphabetical order.
If you want to list them by size, you can use
ls -S; by timestamp:
ls -t, and so on.
ls is a particular utility. What happens when we do this:
for myfile in *
echo "My file is called $myfile"
We get an alphabetically sorted list (see
man ascii for the actual detail; they’re sorted by ASCII value, so numbers first, then uppercase letters, then lowercase letters).
This can be a pain, but it can also be quite useful. If you’ve got a bunch of files:
Then you can play with them in order, just by using the asterisk:
for i in *
echo "File $i" >> all.txt
cat $i >> all.txt
And it will sort them into order for you (“1” comes before “2” in ASCII, and so on…)
Or you could just do this:
more * > all.txt
more will prefix each file with its name in a header, if there is more than one file to process.