我需要对按时间排序的文件名对进行排序。每个文件都以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}
从UMSATZ
变量的前面剥离了字符串x
。
为什么不只是简单地找到所有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
,那么$sans_prefix
等于_1111111122.TXT.GPG
。 *$sans_prefix
应列出具有相同数字后缀的两个文件。