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

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

我有一些文件名以 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不应该成为任何严肃剧本的一部分。

相关内容