我有一些文件名以 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
Run Code Online (Sandbox Code Playgroud)
然后我想这样排序:
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
Run Code Online (Sandbox Code Playgroud)
我曾尝试将ls
(使用参数-t
和-r
)与sort
(使用参数-kn,m
- 其中n,m
指定列的范围 - 和-r
)结合起来,但是经过数小时的搜索和尝试,我没有成功。
使用 GNU 实用程序,
ls -1t | sort -nst '_' -k 1,1
Run Code Online (Sandbox Code Playgroud)
ls -1t
按修改时间排序,每行输出一个文件。
sort
:
-n
: 做一个数字排序,-t '_'
: 使用下划线作为字段分隔符,-k 1,1
: 对第一个字段进行排序(即第一个下划线前的两位数字),-s
: 做一个稳定的排序,即不要使用以下字段进行排序,以防两行具有相同的第一个字段。如果您更喜欢长列表格式输出,
ls -lt | sort -nsk 9.2
Run Code Online (Sandbox Code Playgroud)
的9.2
主要手段:只有排序的前两个第九字段的字符。
我假设这仅用于可视化,因为解析ls
不应该是任何严肃脚本的一部分。
归档时间: |
|
查看次数: |
122 次 |
最近记录: |