Ls
列出按數字排序的文件
我有一堆文件從
log1
到log164
。我正在嘗試在 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
等)。