Answers:
如果您正在谈论错误消息,则可以通过将其发送到位存储桶来消除该错误消息:
cp ./src/*/*.h ./aaa 2>/dev/null
如果要隐藏退出代码和错误消息:
cp ./src/*/*.h ./aaa 2>/dev/null || :
cp
在不被PATH
莫名其妙...)
您正在寻找类似的东西
if [ -e file ]
then cp file /somewhere
fi
(不幸的是,该-f
选项不是您要查找的机器人。)
如果您想匹配一个glob,那是行不通的;使用find
代替,例如:
find ./src -name \*.h -exec cp {} ./destination \;
set -e
,并且文件在[
和cp
调用之间消失,则脚本将崩溃)。
旧问题,但可能与其他问题有关。
如果您不需要使用cp,则可以尝试使用rsync。
要将所有文件从源复制到目标目录,请运行:
rsync -avzh --ignore-errors /path/to/source /path/to/destination
Rsync随大多数类似Unix的系统一起提供,例如Linux,Mac OS X或FreeBSD。
--ignore-missing-args
:rsync -av --ignore-missing-args ./src/*/*.h ./aaa
这样做的优点--ignore-errors
在于,唯一被忽略的错误是与不存在的源文件有关的错误。随着--ignore-errors
每一个错误被忽略,这可能是危险的。另外,还要考虑到该参数是最近才使用的,因此它在旧版本的rsync中可能不存在。
将结果传递到true可以确保命令将始终成功。我已经在Linux上尝试过此操作,但在任何Mac OS上都没有试过:
cp ./src/*/*.h ./aaa | true
|
始终运行,而||
仅在出现错误时才运行。和true
通常是二进制,而结肠:
是一个内置的和不消耗一个PID。
您可以强制正确的错误状态。具有功能:
$ 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
:
在这种情况下意味着什么。