检查find命令是否返回(在bash脚本中)

时间:2012-12-12 14:00:46

标签: linux bash

我的服务器上有以下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文件。

有人可以帮我修改这个脚本吗?

由于

4 个答案:

答案 0 :(得分:7)

您可以检查结果是否正常,然后检查结果是否为空:

   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

答案 1 :(得分:1)

find /backups/www -type f -mtime -1 -exec tar uf /daily/backup-$today.tar {} +

使用-exec优于xargs。不需要管道,它将处理带有空格,换行符和其他不寻常字符的文件名,而无需额外的工作。最后的{}是文件名的占位符,+标记-exec命令的结尾(如果find有更多参数)。< / p>

作为奖励,如果没有找到文件,它将不会执行命令。

答案 2 :(得分:0)

一个相对简单的技巧是:

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

这样你就可以保证总能找到至少一个文件(并且它的大小很小)。

答案 3 :(得分:0)

如果没有输入,

xargs -r什么都不做。