Ls

列出按數字排序的文件

  • March 31, 2021

我有一堆文件從log1log164

我正在嘗試在 UNIX 終端中列出目錄(已排序),但排序函式僅提供如下格式:

home:logs Home$ ls -1 | sort
log1.gz
log10.gz
log100.gz
log101.gz
log102.gz
log103.gz
log104.gz
log105.gz
log106.gz
...etc

我想要的是

home:logs Home$ ls -1 | sort
log1.gz
log2.gz
log3.gz
log4.gz
log5.gz
log6.gz
log7.gz
...{more here}
log99.gz
log100.gz
log101.gz
log102.gz
...etc

關於我可以用來做這件事的任何建議?

ls為什麼不對這種特殊情況使用內置的 GNU功能:

-v— 文本中自然排序的(版本)數字

例如:

ls -1v log*

使用 GNU ls(即在 Linux、Cygwin 或其他專門安裝了 GNU ls 的系統上):

ls -v

在 zsh 中:

echo *(n)

在其他外殼中:

echo log?.gz log??.gz log???.gz

如果您希望每個文件名在單獨的行上,請替換echo為。printf '%s\n'

如果您還需要文件元數據 ( ls -l) 並且您沒有 GNU ls,則需要為ls要按字典順序查看的每個文件名或文件名組單獨呼叫。

ls -ld log?.gz; ls -ld log??.gz; ls -ld log???.gz

為避免這些困難,請在文件名中使用足夠多的前導零,以便字典排序對人類友好(log001.gz等)。

引用自:https://unix.stackexchange.com/questions/33909