簡體   English   中英

檢查find命令是否返回了某些內容(在bash腳本中)

[英]check if find command return something (in bash script)

我的服務器上有以下bash腳本:

today=$(date +"%Y-%m-%d")
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar

如您所見,它創建了過去24小時內修改/創建的文件的備份。 但是,如果找不到文件,則會創建損壞的tar文件。 我想將其包裝在if..fi語句中,以便id不會創建空的/損壞的tar文件。

有人可以幫我修改此腳本嗎?

謝謝

您可以檢查結果是否正常,然后檢查結果是否為空:

   today=$(date +"%Y-%m-%d")
   results=`find /backups/www -type f -mtime -1`


    if [[ 0 == $? ]] ; then
     if [[ -z $results ]] ; then
      echo "No files found"
     else
      tar uf /daily/backup-$today.tar $results
     fi
    else
     echo "Search failed"
    fi
find /backups/www -type f -mtime -1 -exec tar uf /daily/backup-$today.tar {} +

使用-execxargs更可取。 不需要管道,它無需額外的工作即可處理帶有空格,換行符和其他不尋常字符的文件名。 末尾的{}是文件名的占位符,而+標記-exec命令的末尾(如果要find參數更多)。

另外,如果找不到文件,它將不會執行命令。

一個相對簡單的技巧是:

today=$(date +"%Y-%m-%d")
touch /backups/www/.timestamp
find /backups/www -type f -mtime -1|xargs tar uf /daily/backup-$today.tar

這樣一來,您可以確保始終找到至少一個文件(並且該文件的大小最小)。

如果沒有輸入, xargs -r不執行任何操作。

暫無
暫無

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

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