Bash

如何列出文件 - 按文件名和修改日期排序?

  • October 31, 2020

我有一些文件的名稱以 00、01、… 開頭,但可以有多個文件名具有相同的編號,即 00_filename1、00_filename2。我想按名稱排序列出它們,但如果有更多具有相同起始編號的文件,我希望它們也按修改日期排序(按降序排列)。

所以代替這個:

Oct 31 19:05 00_trash
Oct 31 19:14 00_trash_00
Oct 31 18:57 01_creating_dirs.py
Oct 31 19:05 01_trash
Oct 31 16:20 02_creating_csv.py
Oct 31 19:22 02_renaming_files.sh
Oct 31 16:20 03_creating_db.py
Oct 31 19:06 03_trash
Oct 31 16:21 04_importing_csv_to_db.py
Oct 31 16:20 05_some_xl.py
Oct 31 16:22 06_regex.py

我希望然後像這樣排序:

Oct 31 19:14 00_trash_00
Oct 31 19:05 00_trash
Oct 31 19:05 01_trash
Oct 31 18:57 01_creating_dirs.py
Oct 31 19:22 02_renaming_files.sh
Oct 31 16:20 02_creating_csv.py
Oct 31 19:06 03_trash
Oct 31 16:20 03_creating_db.py
Oct 31 16:21 04_importing_csv_to_db.py
Oct 31 16:20 05_some_xl.py
Oct 31 16:22 06_regex.py

我嘗試將ls(使用參數-t-r)與sort(使用參數-kn,m-n,m指定列的範圍-和-r)結合起來,但是經過數小時的搜尋和嘗試,我沒有成功。

使用 GNU 實用程序,

ls -1t | sort -nst '_' -k 1,1
  • ls -1t按修改時間排序,每行輸出一個文件。

  • sort:

    • -n: 進行數字排序,
    • -t '_': 使用下劃線作為欄位分隔符,
    • -k 1,1: 對第一個欄位進行排序(即第一個下劃線前的兩位數),
    • -s:進行穩定排序,即不要使用以下欄位進行排序,以防兩行具有相同的第一個欄位。

如果您更喜歡長列表格式輸出,

ls -lt | sort -nsk 9.2

key的9.2意思是:只對第 9 個欄位的前兩個字元進行排序。

我假設這只是為了視覺化,因為解析ls不應該是任何嚴肅腳本的一部分。

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