当源文件不存在时如何让'cp'命令不会触发错误?

我正在使用Mac OS X.我试图复制一些文件与cp命令为这样的生成脚本。

cp ./src/*/*.h ./aaa 

但是如果./src目录中没有.h文件,这个命令会激发一个错误。 如何使命令不会触发错误? (无声失败)错误使得编译结果失败,但是我只想在只有一些头文件的情况下进行复制。

    如果您正在讨论错误消息,可以通过将其发送给位桶来压制:

     cp ./src/*/*.h ./aaa 2>/dev/null 

    如果要抑制退出代码和错误消息:

     cp ./src/*/*.h ./aaa 2>/dev/null || : 

    你正在寻找的东西沿线

     if [ -e file ] then cp file /somewhere fi 

    (不幸的是, -f选项不是你正在寻找的机器人。)

    如果你想匹配一个glob,那就行不通了; 用find来代替,例如:

     find ./src -name \*.h -exec cp {} ./destination \; 

    老问题,但可能仍然与其他人有关。
    如果你不需要使用cp,你可以尝试使用rsync。
    要将所有文件从源复制到目标目录,请运行:

     rsync -avzh --ignore-errors /path/to/source /path/to/destination 

    Rsync带有大多数类Unix系统,如Linux,Mac OS X或FreeBSD。

    将结果configuration为true可确保命令始终成功。 我已经在Linux上尝试过,但不是在任何Mac OS上:

     cp ./src/*/*.h ./aaa | true 

    您可以强制正确的错误状态。 具有以下function:

     $ cpalways () { cp $1 $2 2>/dev/null ; return 0 ; } 

    鉴于以下情况:

     $ ls foo bar baz ls: baz: No such file or directory bar foo 

    定期复制将返回一个错误。 它将返回1的退出状态。

     $ cp baz bar ; echo $? cp: baz: No such file or directory 1 

    如果我们使用上面的cpalways()函数,将会隐藏任何错误:

     $ cpalways baz bar ; echo $? 0 $ cpalways foo bar ; echo $? 0 $ cpalways baz bar ; echo $? 0