2016-08-25 39 views
1

我正在尋找處理15分鐘內已修改的文件,忽略其餘部分。我想這樣做在一個for循環,這樣的:當我運行上面如何在for循環中檢查文件是否比15分鐘更新

for f in *; do 
    if test 'find $f -mtime -0h15m' 
    then 
     mysql -e "load data local infile '"$f"' 
        into table "$MYSQL_TABLE" 
        fields terminated by '\t' 
        lines terminated by '\n' 
        ignore 1 lines" -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB --local-infile 
    fi 
done 

,所有文件都是進口的,即使是那些年齡超過15分鐘。

回答

4

你有兩個問題。

首先,-mtime的參數是天數而不是分鐘,您需要使用--mmin來指定以分鐘爲單位的差異。

其次,您使用了錯誤的引號類型。要將字符串的結果替換爲命令,您必須使用反引號或$()。由於引號只是返回一個文字字符串,所以它們不執行該命令。

如果文件名包含空格或其他特殊字符,還應引用它以防止出現問題。

所以它應該是:

if test "$(find "$f" -mmin -15)" 
then 
+0

哦,我錯過了那個報價的事情! –

+0

這工作就像一個魅力,感謝@Barmar! (並感謝JFF的回覆) – xianbei

1

-mtime只接受給定的天數(當然,對於版本我知道的!)

使用find-mmin選項,非常適合於你想要的東西:

if test `find $f -mmin -15` 
+0

嗯...仍然沒有工作。來自昨天的文件仍然以這種方式導入。上面的腳本還有其他問題嗎? – xianbei

+0

是的,請參閱Barmar的回答(或者我的反編輯)。我回答太快,我錯過了第二個問題:) –

1

調用find一次爲每個文件是一種浪費;調用一次來找到匹配的文件。

cmd="load data local infile '{}' 
into table $MYSQL_TABLE 
fields terminated by '\t' 
lines terminated by '\n' 
ignore 1 lines" 

find . -mmin -15 -exec mysql -e "$cmd" -u$MYSQL_USER -p$MYSQL_PASS $MYSQL_DB --local-infile \; 
+0

感謝您的建議,歡呼聲。 – xianbei