ソースファイルがターゲットファイルより最新の場合、またはターゲットファイルが見つからない場合にのみコピーしたいと思います。ご存知のように、この機能は次のコマンドを使用して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
非組み込みLinuxでは標準ですが、Solarisでは標準ではないGNU coreutilsの機能です。
Solaris またはその他の POSIX 互換システムでは、次のものを使用できます。pax
、同様の機能があります。このコマンドはpax
POSIX Historyコマンドに代わるもので、パススルーモードと似ています。オプションは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のソースコードはオープンソースパッケージ全体に含まれており、以下からダウンロードできます。ここ(参考として1GBファイルです。)
答え3
かなり古いバージョンのSolarisを使用しています。とにかく他の人が指摘したように、-u
このオプションはGNUで「発明」されているので、GNUバージョンを使用する必要がありますcp
。GNUコアツール次に、gcp
コマンドラインで明示的に引用します。あなたの例は
gcp -u /source/*.txt /destination/
設置方法を確認できますここしかし、システム管理者が仕事をしているなら、すでにそこにいるでしょう(これは私の個人的な意見です:-))