Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 检查find命令是否返回某些内容(在bash脚本中)_Linux_Bash - Fatal编程技术网

Linux 检查find命令是否返回某些内容(在bash脚本中)

Linux 检查find命令是否返回某些内容(在bash脚本中),linux,bash,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文件 有人能帮我修改这个脚本吗 谢谢 使用-exec优于xargs。不需要管道,它可以

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

有人能帮我修改这个脚本吗

谢谢

使用
-exec
优于
xargs
。不需要管道,它可以处理带有空格、换行符和其他不寻常字符的文件名,而无需额外工作。末尾的
{}
是文件名的占位符,
+
标记
-exec
命令的结尾(如果有更多参数要
查找

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

使用
-exec
优于
xargs
。不需要管道,它可以处理带有空格、换行符和其他不寻常字符的文件名,而无需额外工作。末尾的
{}
是文件名的占位符,
+
标记
-exec
命令的结尾(如果有更多参数要
查找


另外,如果没有找到文件,它将不会执行命令。

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

   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

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

   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

一个相对简单的技巧是:

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

这样,您就可以保证始终至少找到一个文件(并且文件大小最小)。

一个相对简单的技巧是:

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
如果没有输入,则不会执行任何操作。

xargs-r
如果没有输入,则不会执行任何操作。

您好,执行find/backups/www-type f-mtime-1-exec tar uf/daily/backup-$today.tar{}+给出错误:查找:选项“-exec”需要argument@Kupe3你确定你打出来的和写的一模一样吗?这肯定会奏效……绝对是最好的答案<代码>+1从功能角度来看,这是一个很好的答案。但是,需要注意的是,它对每个文件运行一次
tar
,每次运行时,它都必须打开输出文件,查找到最后,并附加一些内容,因此它可能会对大型数据集产生严重的性能问题/影响…@twalberg You's think
-exec cmd\。带有加号而不是分号的
-exec cmd+
表单在附加所有文件名的情况下运行命令一次。hi,执行find/backups/www-type f-mtime-1-exec tar uf/daily/backup-$today.tar{}+会给出错误:find:option`-exec'需要argument@Kupe3你确定你打出来的和写的一模一样吗?这肯定会奏效……绝对是最好的答案<代码>+1
从功能角度来看,这是一个很好的答案。但是,需要注意的是,它对每个文件运行一次
tar
,每次运行时,它都必须打开输出文件,查找到最后,并附加一些内容,因此它可能会对大型数据集产生严重的性能问题/影响…@twalberg You's think
-exec cmd\。带有加号(而不是分号)的
-exec cmd+
表单在附加所有文件名的情况下运行一次命令。