以bash"for"循环排序

use*_*144 4 unix sorting bash

有没有办法控制我运行a时发生的排序,对于i in*; 做; echo $ i; 完成; 在我的目录中.它似乎总是使用ascii排序.无论如何做数字排序?

谢谢,Vivek

bos*_*bos 6

您始终可以使用 sort(1) 及其数字排序:

for i in $(ls -1 * | sort -n) ; do echo $i ; done
Run Code Online (Sandbox Code Playgroud)

  • 循环 $(ls -1 *) 是有问题的。如果文件名使用空格或换行符,您将得到奇怪的(甚至灾难性的)结果。 (2认同)

she*_*ter 5

如何制作你的文件名,以便他们自然地排序为数字,即用前导零填充.而不是1 .. 10 .. 100,使用001 ..010 .. 100

要包含子目录:

for i in $( ls -d * | sort -n ); do echo $i; done;
Run Code Online (Sandbox Code Playgroud)

要排除子目录:

for i in $( ls | sort -n ); do echo $i; done;
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.