如何让“cp”命令在源文件不存在时不引发错误?

如何让“cp”命令在源文件不存在时不引发错误?

我正在使用 Mac OS X。我正在尝试使用 cp 命令复制一些文件以用于这样的构建脚本。

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

但是如果 ./src 目录中没有 .h 文件,此命令会引发错误。如何使命令不引发错误?(静默失败)错误导致构建结果失败,但我只想在只有一些头文件时进行复制。

答案1

如果您正在谈论错误消息,您可以通过将其发送到位桶来抑制它:

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

如果您想隐藏退出代码和错误消息:

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

答案2

你正在寻找类似的东西

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

(不幸的是,该-f选项不是您要找的机器人。)

如果你想匹配一个 glob,这是行不通的;find而是使用,例如:

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

答案3

将结果传递给 true 可确保命令始终成功。我在 Linux 上尝试过此操作,但在任何 Mac OS 上都没有尝试过:

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

答案4

你可以强制正确的错误状态。使用一个函数:

$ 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

相关内容