我只想在源文件比目标文件新或目标文件丢失时才进行复制。如您所知,此功能将在 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 的选项类似(它们都取自历史归档器,例如和)。cpio
tar
cp -R
-u
cp
tar
ar
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/
如何安装可以找到这里,但如果您的系统管理员完成了他的工作,它就已经在那里了(这只是我个人的意见:-))