Bash
如何列出文件 - 按文件名和修改日期排序?
我有一些文件的名稱以 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
不應該是任何嚴肅腳本的一部分。