簡體   English   中英

bash腳本查找文件名中的日期比當前日期和時間新的所有文件

[英]bash script to find all files where date in filename is newer than current date and time

我是bash的新手,因此在為此選擇正確的語法時遇到了一些麻煩。 但要點是,我需要遍歷某個目錄中的所有文件,並打印將來文件名中日期和時間所在的文件。

文件名語法如下:

2016-04-27_19EST-KST.txt

2016-04-28_02EST-MSK.txt

2016-04-28_03EST-CET.txt

2016-04-28_09EST-EST.txt

2016-04-28_10EST-CST.txt

2016-04-28_12EST-PST.txt

一天中的小時采用軍事格式,我不在乎最后的“ EST-CST”部分。

到目前為止,這是我得到的:

#!/bin/bash

curdate=$(date +%Y-%m-%d)
curtime=$(date +%H)

for fn in *.txt;do
        [ "${curdate}_${curtime}*.txt" "<" "$fn" ] && continue
        echo "$fn"
done

這只會返回目錄中的所有文件。 我在這里做錯了什么?

此腳本將打印名稱代表比當前日期新的所有文件:

#!/bin/bash
d="$(date +%Y-%m-%d_%HZZZ.tmp.txt)"
touch "$d"
printf "%s\n" *.txt | LC_ALL=C sort | awk -v d="$d" 'f{print} d==$0{f=1}'
rm "$d"

這個怎么運作

  • d="$(date +%Y-%m-%d_%HZZZ.tmp.txt)"

    這將創建一個與當前時間匹配的名稱。

  • touch "$d"

    這將創建一個名稱與當前時間匹配的文件。

  • printf "%s\\n" *.txt

    這會將所有*.txt文件名(每行一個)打印到stdout。

    (您的文件名都具有合理的名稱。如果文件名中包含換行符,那么我們希望將此換行符分隔的列表替換為以空值分隔的列表,並對下面的代碼進行適當的更改。)

  • LC_ALL=C sort

    這將文件名按順序排序。 我指定LC_ALL=C以便確保順序是期望的。

    此時,請注意我們在臨時文件名中使用的ZZZ 這樣可以確保臨時文件在當前時間之后排在所有其他文件之后。 如果要在輸出中包含當前時間的文件,則可以改用AAA

  • awk -vd="$d" 'f{print} d==$0{f=1}'

    該代碼在當前時間臨時打印所有文件名。

  • rm "$d"

    這將刪除不再需要的臨時文件。

起色

如果上述腳本正在執行中,則它將在目錄中保留一個雜散文件。 例如,如果在腳本運行時按下Ctrl-C,可能會發生這種情況。 為了確保始終刪除該文件,我們可以使用trap

#!/bin/bash
d="$(date +%Y-%m-%d_%HZZZ.tmp.txt)"
trap 'rm "$d"' EXIT
touch "$d"
printf "%s\n" *.txt | LC_ALL=C sort | awk -v d="$d" 'f{print} d==$0{f=1}'

您的解決方案很接近,但是最好使用數值比較來比較日期,並使用date標准化日期表示,例如:

#!/bin/bash
curdate=$(date +%Y%m%d%H)

for fn in *.txt; do
    tmp=${fn%%EST*}  # remove timezone info, ignored
    fdate=$(date -d "${tmp/_/ }" +%Y%m%d%H)
    (( curdate < fdate )) && echo "$fn"
done

在某些時候,您可能需要使用awk或sed或其他方法解析日期。 您可以嘗試如下操作:

#!/bin/bash

curdate=$(date +%Y-%m-%d)
curtime=$(date +%H)

for fn in *.txt;do
    date=$(echo $fn | sed 's/EST.*.txt//')
    if [[ "${curdate}_${curtime}" < "$date" ]]; then
        echo $fn
    fi
done

注意:請記住,sed命令非常具體。 僅當文件名始終使用您發布的格式時,此選項才起作用。 您可以根據自己的需要進行調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM