使用find和xargs如何在不丢弃的情况下停止执行错误

时间:2013-06-13 13:06:07

标签: bash shell

在我的脚本中,我有以下3个命令

基本上它要做的是:

  • 在临时目录中根据文件名创建一系列文件的符号链接。
  • 更改符号链接的名称以匹配当前日期
  • 将符号链接从临时目录移动到正确的位置

-

find . -type f -name "*${regex}-*" -exec ln -s {} "${DataTempPath}/"{} \;
find "$DataTempPath" -type l | sed -e "p;s/A[0-9]*/A${today}/" | xargs -n2 mv
mv $DataTempPath/* $DataSetPath

这将作为cron作业插入,每15分钟运行一次,这在源目录包含有效数据时不是问题。 但是当它不包含任何文件时,我会在第二个find命令和mv命令

上出错

我想要的是如果第一行没有创建任何新链接的话,不会执行脚本的最后两行

2 个答案:

答案 0 :(得分:2)

GNU xargs支持--no-run-if-empty参数,引用文档“如果标准输入完全为空,请不要运行命令。默认情况下,即使有命令,命令也会运行一次没有输入“。 这应该有助于避免xargs错误(假设您正在运行GNU xargs

答案 1 :(得分:0)

检查命令的状态:

find . -type f -name "*${regex}-*" -exec ln -s {} "${DataTempPath}/"{} \;
if [[ $? == 0 ]]; then 
 find "$DataTempPath" -type l | sed -e "p;s/A[0-9]*/A${today}/" | xargs -n2 mv
 mv $DataTempPath/* $DataSetPath
fi