如果find命令失败,则Shell停止脚本

时间:2017-02-06 08:35:05

标签: shell find

美好的一天。

在一个很好的脚本中我有以下find命令:

find -maxdepth 1 \! -type d -name "some_file_name_*" -name "*.txt" -name "*_${day_month}_*" -exec cp {} /FILES/directory1/directory2/directory3/ +

如果命令找不到任何内容,我想知道如何停止脚本。

2 个答案:

答案 0 :(得分:1)

GNU xargs-r开关和管道一起使用,以确保find的输出仅在其非空时传递给cp

find -maxdepth 1 \! -type d -name "some_file_name_*" -name "*.txt" -name "*_${day_month}_*" \
       | xargs -r I{} cp "{}" /FILES/directory1/directory2/directory3/

I{}find命令输出的占位符,传递给cp

根据-r页面,I{}man xargs代表以下内容,

-r, --no-run-if-empty
      If the standard input does not contain any nonblanks, do not run
      the command.  Normally, the command is run once even if there is
      no input.  This option is a GNU extension.

-I replace-str
       Replace occurrences of replace-str in the initial-arguments with
       names  read  from  standard input.  

答案 1 :(得分:1)

您可以添加-exec false {},以便在找到某些内容时获得错误的退出状态(这会使其有点颠倒)

if find . -name foo -exec echo ok ';' -exec false {} +
then
    echo 'not found'
    exit
fi
echo found

在stackexchange中查看类似问题:How to detect whether “find” found any matches?,特别是this answer,其中提出了false技巧