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

问题描述:

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

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

我可以解决这种

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对?非常感谢你的任何想法

+0

如果* auszug_a *在* auszug_b *之后有一个日期,但在* umsatz_b *之前,他们应该如何排序? – tripleee

我不知道如果我把你对,我明白你想要有按照与相应的AUSZUG_*文件交错的时间排序的UMSATZ_*文件列表。你可以在bash这一个班轮得到这样的:

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

异常地看着${x#UMSATZ}x变量前面去掉字符串UMSATZ

+0

解决:)感谢您的想法,好主意。更好的是在一行:) – Zrebec

为什么不只是简单地找到所有的UMSATZ*文件的时间,然后列出AUSZUG*一个每个UMSATZ*的你会发现:

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

或者这样的事情...的${file#UMSATZ}删除前缀UMSATZ from $file,因此如果$file等于UMSATZ_1111111122.TXT.GPG,那么$sans_prefix等于_1111111122.TXT.GPG*$sans_prefix应列出具有相同数字后缀的两个文件。

+0

非常感谢。是的,这是个好主意。谢谢 – Zrebec