列出按时间排序的文件密钥对

list file key-pair sorted by time

我需要对按时间排序的文件名对进行排序。每个文件都以 AUSZUG 或 UMSATZ 开头(后面还有一些数字)。但问题是我不能按时间对它进行排序,因为有些文件可以上传(创建)而不是成对的。例如默认排序:

ls -ltr --time-style "long-iso" {UMSATZ,AUSZUG}* | head -n 20
-rw-r--r-- 1 user group 0 2015-05-04 14:59 UMSATZ_2107381391.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 14:59 AUSZUG_2107381391.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 UMSATZ_1111111122.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 AUSZUG_1111111122.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 UMSATZ_9785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 AUSZUG_9785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:17 UMSATZ_6785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:17 AUSZUG_6785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 AUSZUG_8785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 AUSZUG_5785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 UMSATZ_8785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 UMSATZ_5785745789.TXT.GPG

你可以看到,AUSZUG_5785745789.TXT.GPG 的 UMSATZ 对在最后一行

我可以通过排序解决这个问题

ls -ltr --time-style "long-iso" {UMSATZ,AUSZUG}* | sort -t "_" -k 2 | head -n 20
-rw-r--r-- 1 user group 0 2015-05-04 15:00 AUSZUG_1111111122.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 UMSATZ_1111111122.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 14:59 AUSZUG_2107381391.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 14:59 UMSATZ_2107381391.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 AUSZUG_5785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 UMSATZ_5785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:17 AUSZUG_6785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:17 UMSATZ_6785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 AUSZUG_8785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:45 UMSATZ_8785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 AUSZUG_9785745789.TXT.GPG
-rw-r--r-- 1 user group 0 2015-05-04 15:00 UMSATZ_9785745789.TXT.GPG

但现在还不是时候:(有人想按按时间排序的 AUSZUG-UMSATZ 对排序吗?

我不确定我是否理解正确,我知道您想要一个按时间排序的 UMSATZ_* 文件列表,并与相应的 AUSZUG_* 文件交错排列。你可以用这个单行在 bash 中得到这个:

ls -t UMSATZ_* | while read x; do echo "$x"; echo "AUSZUG${x#UMSATZ}"; done

看起来不寻常的 ${x#UMSATZ}x 变量的前面剥离了字符串 UMSATZ

为什么不简单地按时间查找所有 UMSATZ* 文件,然后列出 AUSZUG* 对应您找到的每个 UMSATZ*

ls -tr UMSATZ* | while read file
do
    sans_prefix=${file#UMZATZ}
    ls -ld *$sans_prefix
done

或类似这样的东西... ${file#UMSATZ}$file 中删除前缀 UMSATZ,因此如果 $file 等于 UMSATZ_1111111122.TXT.GPG,则 $sans_prefix 等于 _1111111122.TXT.GPG*$sans_prefix 应列出具有相同数字后缀的两个文件。