我的系统中有这样的文件-
-rw-r--r-- 1 abc abcadm 14852497 Jul 23 01:11 ABCD_72_3_20210722_163502.csv
-rw-r--r-- 1 abc abcadm 14853145 Jul 23 01:11 ABCD_72_1_20210722_163502.csv
-rw-r--r-- 1 abc abcadm 14839699 Jul 23 01:11 ABCD_72_2_20210722_163502.csv
-rw-r--r-- 1 abc abcadm 14842673 Jul 23 01:11 ABCD_72_5_20210722_163502.csv
-rw-r--r-- 1 abc abcadm 14843811 Jul 23 01:11 ABCD_72_4_20210722_163502.csv
我想对这些文件进行排序,只打印文件名,并按如下所示的方式排序:
ABCD_72_1_20210722_163502.csv
ABCD_72_2_20210722_163502.csv
ABCD_72_3_20210722_163502.csv
ABCD_72_4_20210722_163502.csv
ABCD_72_5_20210722_163502.csv
我正在使用以下命令按升序排序并仅打印名称,但列表未排序。
ls -l | ABCD_72_[0-9]*_20210722_163502* | awk '{print $9}' | sort
请指出我错在哪里或者还有其他方法吗?
答案1
首先,不要解析 的输出ls
。我们可以修改答案另一个问题稍微让它变成非递归的,然后find ./ -maxdepth 1 -printf "%f\n"
,并且你想要它排序,所以把它放到管道中sort
。最后的命令是
$ find ./ -maxdepth 1 -printf "%f\n" | sort
正如@Rinzwind 指出的那样,如果您想要按数字排序(因此2
可以放在之前12
),请将--numeric-sort
其添加到命令的末尾。
find ./ -maxdepth 1 -printf "%f\n" | sort --numeric-sort
答案2
你有没有考虑过
ls -v -1
这也可以自然地与文件规范一起使用,例如:
ls -v -1 ABCD*
或者
ls -v -1 A*.csv
答案3
如果切换到zsh
,则可以使用它的数字 glob 限定符:
n sets the NUMERIC_GLOB_SORT option for the current pattern
(请参阅Glob Qualifiers
部分FILENAME GENERATION
)man zshexpn
。
前任。
% print -rC1 ABCD_*.csv(n)
ABCD_72_1_20210722_163502.csv
ABCD_72_2_20210722_163502.csv
ABCD_72_3_20210722_163502.csv
ABCD_72_4_20210722_163502.csv
ABCD_72_5_20210722_163502.csv
或(按相反的数字顺序)
% print -rC1 ABCD_*.csv(nOn)
ABCD_72_5_20210722_163502.csv
ABCD_72_4_20210722_163502.csv
ABCD_72_3_20210722_163502.csv
ABCD_72_2_20210722_163502.csv
ABCD_72_1_20210722_163502.csv