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

时间:2015-05-04 14:09:19

标签: linux bash sorting ls

我需要对按时间排序的文件名对进行排序。每个文件都以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排序按时间排序?

2 个答案:

答案 0 :(得分:1)

我不确定我是否帮助您,我知道您希望列出按时间排序的UMSATZ_*文件与相应的AUSZUG_*文件。你可以用这个单行代码来实现这个:

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

异常查看${x#UMSATZ}UMSATZ变量的前面剥离字符串x

答案 1 :(得分:0)

为什么不按时找到所有UMSATZ*个文件,然后为找到的每个AUSZUG*列出UMSATZ*个文件:

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

或类似的内容...... ${file#UMSATZ}会从UMSATZ中移除前缀$file,因此,如果$file等于UMSATZ_1111111122.TXT.GPG,则{{1} }等于$sans_prefix_1111111122.TXT.GPG应列出具有相同数字后缀的两个文件。