如何在不支持 -u 选项的 Solaris 系统上使用 cp -u?

如何在不支持 -u 选项的 Solaris 系统上使用 cp -u?

我只想在源文件比目标文件新或目标文件丢失时才进行复制。如您所知,此功能将在 Linux 系统上通过以下命令运行。

cp -u /source/*.txt /destination/  

但是当我在 Solaris 系统 10 上使用此命令时。以下是我的输出:

cp: illegal option -- u
Usage: cp [-f] [-i] [-p] [-@] f1 f2
cp [-f] [-i] [-p] [-@] f1 ... fn d1
cp -r|-R [-H|-L|-P] [-f] [-i] [-p] [-@] d1 ... dn-1 dn 

有什么解决办法吗?

答案1

cp -u是 GNU coreutils 的一项功能,它是非嵌入式 Linux 上的标准,但不是 Solaris 上的标准。

在 Solaris 或任何其他兼容 POSIX 的系统上,您可以使用pax,具有类似的功能。该命令是 POSIX 历史命令pax的替代品;在其传递模式下,它类似于.该选项与 GNU 的选项类似(它们都取自历史归档器,例如和)。cpiotarcp -R-ucptarar

cd /source
pax -rw -u *.txt /destination

(不pax -rw -u /source/*.txt /destination,因为那会创造/destination/source/file.txt

1请注意,许多 Linux 发行版在默认安装中省略了 pax。但它始终可以作为软件包提供。

答案2

您可以使用rsync -u它提供相同的功能。它在当前的 Solaris 发行版 (11.x) 以及最新的 Solaris 10 发行版 (Oracle Solaris 10 1/13)。

Solaris 10 的源代码包含在完整的开源代码包中,可从以下位置下载:这里(请注意,这是一个 1 GB 的文件)。

答案3

您使用的是相当旧的 Solaris。无论如何,正如其他人指出的-u那样,该选项是 GNU 中“发明”的,因此您必须使用 GNU 版本的cp.这是通过安装完成的GNU 核心工具然后gcp在命令行上显式引用。你的例子会变成

gcp -u /source/*.txt /destination/

如何安装可以找到这里,但如果您的系统管理员完成了他的工作,它就已经在那里了(这只是我个人的意见:-))

相关内容