我正在使用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