【发布时间】:2026-01-28 09:45:02
【问题描述】:
有什么方法可以控制我运行时发生的排序, 对于我在 * ;做;回声 $i;完毕; 在我的目录中。 它似乎总是使用 ascii 排序。无论如何要进行数字排序?
谢谢, 维韦克
【问题讨论】:
有什么方法可以控制我运行时发生的排序, 对于我在 * ;做;回声 $i;完毕; 在我的目录中。 它似乎总是使用 ascii 排序。无论如何要进行数字排序?
谢谢, 维韦克
【问题讨论】:
您始终可以使用 sort(1) 及其数字排序:
for i in $(ls -1 * | sort -n) ; do echo $i ; done
【讨论】:
* 也是如此。实际上,不,这不是多余的;它会列出子目录的内容,这可能不是你想要的。
-1 强制单列输出,但是当ls 的输出进入管道时无论如何都会发生这种情况。可能有用的是-d 列出目录而不列出目录的内容。
ls和mywiki.wooledge.org/ParsingLs;简单的修复类似于printf '%s\n' * | sort -n | while IFS= read -r i; do ...,但如果您的文件名中包含换行符,它也会失败。
如何使您的文件名自然排序为数字,即用前导零填充。代替1 .. 10 .. 100,使用001 ..010 .. 100?
要包含子目录:
for i in $( ls -d * | sort -n ); do echo $i; done;
排除子目录:
for i in $( ls | sort -n ); do echo $i; done;
我希望这会有所帮助。
【讨论】:
您可以使用您为目录指定的 ls [排序选项] 中的排序 即
for i in `ls -X` ; do
echo $i
done
首先执行具有特定排序的 ls 命令,在示例情况下排序扩展,然后您给出带有 for 循环的列表
【讨论】:
for i in $(ls | sort -n) ; do echo $i ; done
【讨论】: