AIXでcpでファイルを上書きするのを防ぐ方法は?

AIXでcpでファイルを上書きするのを防ぐ方法は?

ディレクトリツリー構造を維持しながら、2日より古いいくつかの大容量ファイルを定期的にNASに保存する必要があります。これらのファイルは7日間ソースディレクトリに残ります。

最初に私達はfindこれのために次を使用しました:

find ${SOURCE_DIR} -type f -mtime +2 -exec ksh -c 'mkdir -p $(dirname ${DEST_NAS_DIR}$0) && cp -p $0 ${DEST_NAS_DIR}$0' {} \;

しかし、私たちはスクリプトがすでにアーカイブされているファイルをコピーしており、各実行に時間がかかりすぎることがわかりました。

cp には -n/--no-clobber オプションはありません。それでは、ターゲットが同じファイルを上書きするのをどのように防ぐことができますか?どんなアイデアがありますか?

あいさつ!

答え1

rsyncシステムで使用可能な場合は、対応する--ignore-existingフラグを使用できます。

find ${SOURCE_DIR} -type f -mtime +2 \
  -exec rsync --ignore-existing '{}' ${DEST_NAS_DIR} \;

おそらくこの-uフラグは興味深いかもしれません。送信者が既存のファイルの更新バージョンも持っていることを確認し、その場合は更新します。

--archiveスキーマを有効にすることを確認してください。これは、時間、所有権などに関するいくつかの情報を繰り返して維持することを意味します。詳細を見るman rsync

答え2

次の方法を使用して不正行為を試すことができます。

...yes n|cp -i -p $0 ${DEST_NAS_DIR}$0' {}...

残念ながら、これをテストするAIXはありませんが、これを行うには既存のファイルを上書きする必要があり、 'n'を送信することでこれを防ぐことができます。

PS現在はテストしてみるところがありませんので、実際のファイルを使用する前にテストしてください。

関連情報