在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 我目前没有在哪里测试它,所以请在使用真实文件之前进行测试。

相关内容