在for循环中对目录中的子目录进行排序

Sort subdirectories in a directory in a for loop

假设你有

for subdir in *

并且您希望父目录中的子目录(名为 1、2、...、10、11...)以人类数字顺序读取,即 1、2、3 等,而不是在机器中一个,即 1、10 等。您是如何执行的?

您可以使用 -n (--numeric-sort) 选项 sort 按数字顺序排序:

~/tmp for f in $(ls | sort -n); do echo $f; done
1
2
3
4
5
6
7
8
9
10

~/tmp for f in $(ls); do echo $f; done
1
10
2
3
4
5
6
7
8
9

如果不需要做任何操作,只需要按顺序列出目录即可:

ls | sort -n