如何更改 bash 列出文件的顺序

How to change the order in which files are listed by bash

我有一些文件。当我列出它们时,我得到了订单:

frame0001i0002.png
frame0001.png
frame0002i0003.png
frame0002.png
frame0003i0004.png
frame0003.png
frame0004.png
frame0005.png
frame0006.png

我原以为frame0001.png会在frame0001i0002.png之前,因为我需要按顺序对它们进行操作:

frame0001.png
frame0001i0002.png
frame0002.png
frame0002i0003.png
frame0003.png
frame0003i0004.png
frame0004.png
frame0005.png
frame0006.png

我是否需要重命名它们以按我想要的顺序显示?


最后我想把他们的名字改成:

frame0001.png
frame0002.png
frame0003.png
frame0004.png
frame0005.png
frame0006.png
frame0007.png
frame0008.png
frame0009.png

并按照上面单元格的顺序。

您遇到此问题是因为 i 在您的默认排序顺序中排在 . 之前。

使用以下命令可以获得预期的顺序:

sort -t'.' -k 1,1

这定义了.是一个字段分隔符,我们应该只考虑第一个字段(扩展之前的部分)进行排序。我们现在比较 frame0001frame0001i0002,最短的将首先打印。

ls 也可以使用 -v 选项

$ ls -vw1 *png
frame0001.png
frame0001i0002.png
frame0002.png
frame0002i0003.png
frame0003.png
frame0003i0004.png
frame0004.png
frame0005.png
frame0006.png

来自ls帮助

$ ls --help
...
  -v                         natural sort of (version) numbers within text
  -w, --width=COLS           set output width to COLS.  0 means no limit
...