繁体   English   中英

Bash-防止脚本因错误而停止执行

[英]Bash - prevent script to stop execution on error

我需要在目录中递归查找一种类型的文件。 然后为找到的每个文件执行脚本,将找到的文件作为参数:

#!/bin/bash
find /mnt/storage/content/www/html/smartsite/src/data/resource/ ! -path "*/tmp/*" -regextype posix-awk -iregex "(.*.toConv)" -exec /mnt/storage/content/www/html/smartsite/cron/VideoConvert/convert {} \;

它可以正常工作,但是当调用脚本(转换)引发错误时,执行将停止。 我想防止这种情况,并继续对找到的下一个文件执行。 例如,不管我做什么

/convert || true {} \;

要么

/convert {} || true \;

它总是抛出错误“无参数用于exec”。 我究竟做错了什么?

尝试这个

find ... -exec bash -c "convert {} || true" ";"

要么

find ... -print0 | xargs -r -0 -i convert {}

直接的问题是,解析顺序无法按照您认为的那样工作。 命令:

find /.../resource/ ! -path "*/tmp/*" -regextype posix-awk -iregex "(.*.toConv)" -exec /.../convert || true {} \;

由外壳程序解析为两个命令(由||分隔):

find /.../resource/ ! -path "*/tmp/*" -regextype posix-awk -iregex "(.*.toConv)" -exec /.../convert
true {} \;

...以及\\; 是一个单独命令的一部分, find它,并且抱怨您没有给它完整的-exec序列。 您可以引用/转义|| 因此它将作为-exec序列的一部分传递给find ,但是那样也不会做您想要的事情,因为-exec仅运行单个命令 ,并将其作为参数传递给该命令,因此convert脚本将得到|| true论点...

为了执行您要执行的操作,实际上必须使-exec运行另一个shell,并使该子shell运行convert脚本和true 可以这样做,虽然有点麻烦,但是也不能解决实际问题,因为实际问题并不是您认为的那样。

正如@BroSlow所说, find ... -exec 不会仅仅因为命令返回错误状态(或向stderr输出内容) 而停止 还有其他事情使find停止,因此覆盖退出状态不能解决问题。 您需要找出实际的问题,然后加以解决。

这似乎可以:

convert {} \; || true

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM