我有一些文件名以 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
) 结合起来,但经过几个小时的搜索和尝试后,我没有成功。
答案1
使用 GNU 实用程序,
ls -1t | sort -nst '_' -k 1,1
ls -1t
按修改时间排序,每行输出一个文件。sort
:-n
:进行数值排序,-t '_'
:使用下划线作为字段分隔符,-k 1,1
:对第一个字段(即第一个下划线之前的两位数字)进行排序,-s
:进行稳定排序,即如果两行第一个字段相同,则不要使用以下字段进行排序。
如果您喜欢长列表格式输出,
ls -lt | sort -nsk 9.2
key9.2
的意思是:只对第9个字段的前两个字符进行排序。
我假设这仅用于可视化,因为解析ls
不应该成为任何严肃剧本的一部分。