ls:按时间戳排序(反转),如果时间戳与名称排序相同(不反转)

ls:按时间戳排序(反转),如果时间戳与名称排序相同(不反转)

我想按反向时间戳对目录进行排序,但如果时间戳按名称顺序相同(不反向)

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

相关内容