Linux

獲取所有文件包含的日期值小於輸入日期

  • February 20, 2017

我在一個文件夾中有 1000 個文件 .txt 文件:

ls文件夾 的輸出如下所示:

2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.31.47.105-+0000.txt
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.27.47.000-+0000.txt
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.25.46.891-+0000.txt
2-20160329050200862185.instan-methodstack_2016-03-06-23.55.05.436-+0000_2016-09-07-05.23.46.788-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.07.21.784-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.05.22.541-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.02.41.320-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-06.22.49.534-+0000_2016-07-27-07.01.32.824-+0000.txt

現在,我想列出日期值小於輸入日期的所有文件

例如:

我的輸入日期是:2016-08-11

我想要結果:

2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.07.21.784-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.05.22.541-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-07.02.41.320-+0000_2016-07-27-07.02.41.320-+0000.txt
2-20160329050200862185.instan-methodstack_2016-04-27-06.22.49.534-+0000_2016-07-27-07.01.32.824-+0000.txt

比較日期值必須在以**+0000_開頭的字元串之後進行檢查**

我嘗試了多個命令,但沒有任何效果。

ls | awk ' { i = substr($0, 73, 10); cond = "2015-09-07"; if expr "$i" "<" "$cond" > /dev/null; then print($0); fi }'
ls | awk ' { i = substr($0, 73, 10); if ( (date -d i +"%Y%m%d") -lt 20160907 ) print($0) endif; print("\n") }'

請幫忙。

假設在這種情況下解析 ls不容易出錯:

ls | awk '{ i = substr($0, 73, 10); if(i < "2016-08-11") print }'

或同等的

ls | awk '{ i = substr($0, 73, 10) } i < "2016-08-11" '
  • i = substr($0, 73, 10)將提取的日期保存到變數i
  • i < "2016-08-11"如果此條件為真,則列印輸入行

由於日期為YYYY-MM-DD格式,因此無需任何轉換即可進行簡單的字元串比較

你可以試試這個命令

您可以在 awk 命令中將日期輸入為 yyymmdd 格式

ls *.txt > all_files.txt
awk -F_ -vin_date="20160427" '{split($2,a,"-");date=a[1]a[2]a[3];if(date+0<in_date)print}' all_files.txt

引用自:https://unix.stackexchange.com/questions/345673