簡體   English   中英

在 Linux 中循環瀏覽名稱中具有日期模式的文件

[英]Looping through files with a date pattern in name in Linux

我正在嘗試使用以下內容對任何附加了日期的文件進行 tar:

#!/bin/bash

createDate=[0-9]{4}-[0-9]{2}-[0-9]{2}

for file in $HOME/test/*.log.$createDate ; do
    log=$(basename $file)
    find . -type f | tar -zcvf  $log.tar $log
done

這應該 tar 任何在日志擴展名之后附加日期的文件,例如test.log.2020-01-01 但是,我收到一個錯誤:

tar: *.log.[0-9]{4}-[0-9]{2}-[0-9]{2}: Cannot stat: No such file or directory

所以,它從字面上讀取這個模式,作為一個字符串。 我需要的是它在日志擴展名之后使用該模式來匹配具有該日期格式的任何文件。 這最終將進入 logrotate 配置文件的 postrotate 部分,但我需要確保它首先工作。

您將此模式用作 shell 全局模式:

createDate=[0-9]{4}-[0-9]{2}-[0-9]{2}

這實際上是一個正則表達式,而不是真正的 shell glob 模式。 您的全局匹配失敗並且只給出一個結果: *.log.[0-9]{4}-[0-9]{2}-[0-9]{2}

可以使用以下方法更改此行為:

shopt -s nullglob

您的腳本應修改為:

shopt -s nullglob

for file in $HOME/test/*.log.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
    log=$(basename "$file")
    find . -type f | tar -zcvf "$log.tar" "$log"
done

暫無
暫無

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

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