我想按反向时间戳对目录进行排序,但如果时间戳按名称顺序相同(不反向)
ls -tr
如果两个文件按名称具有相同的时间戳顺序但处于相反模式,则使用
答案1
你可以使用这样的东西
stat --printf "%Y %n\0" * | sort -z -k1,1n -k2
# or quoted file names:
stat --printf "%Y %N\0" * | sort -z -k1,1n -k2
- 第一个排序标准是字段 1 (
%Y
-> 时间戳(精度:秒)),n数字排序。 - 不是r与“最新的优先”类似
ls -t
,这已经是相反的,sort -n
但你可以用来-k1,1nr
改变它。 - 第二个排序标准是从字段 2 到行尾的所有内容(
%n
或%N
--> 文件名) - 使用零分隔符可以避免文件名(包括
\n
.
tr
然后使用和/或根据您的喜好修复格式sed
:
... | tr '\0' '\n'
# or just print the filenames:
... | sed 's/^[0-9]* //;s/$/\n/;s/\x0[0-9]* /\n/g'
输出:
$ touch d; sleep 1; touch b c; sleep 1; touch a;
$ ls -tr
d c b a
$ stat --printf "%Y %n\0" * | sort -z -k1,1n -k2 | sed 's/^[0-9]* //;s/$/\n/;s/\x0[0-9]* / /g'
d b c a