Linux下如何复制但不覆盖?

发布于 2025-01-08 18:35:27 字数 1549 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

魔法唧唧 2025-01-15 18:35:27

取自手册页

-n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)

示例:

cp -n myoldfile.txt mycopiedfile.txt

Taken from the man page:

-n, --no-clobber
              do not overwrite an existing file (overrides a previous -i option)

Example:

cp -n myoldfile.txt mycopiedfile.txt
┼── 2025-01-15 18:35:27

考虑使用rsync

rsync -a -v --ignore-existing src dst

根据评论 rsync -a -v src dst 不正确,因为它将更新现有文件。

Consider using rsync.

rsync -a -v --ignore-existing src dst

As per comments rsync -a -v src dst is not correct because it will update existing files.

黑凤梨 2025-01-15 18:35:27
cp -n

就是你想要的。请参阅手册页。

cp -n

Is what you want. See the man page.

一身骄傲 2025-01-15 18:35:27

这适用于 RedHat:

false | cp -i source destination 2>/dev/null

更新不覆盖是不同的。

This will work on RedHat:

false | cp -i source destination 2>/dev/null

Updating and not overwriting is something different.

久而酒知 2025-01-15 18:35:27

对于那些发现没有“n”选项的人(比如我在 RedHat 上),您可以使用 cp -u 仅在源比现有源更新时才写入文件(或者有不是现有的)。

[编辑] 正如评论中提到的,这将覆盖旧文件,所以这并不完全是OP想要的。使用 ceving 的答案。

For people that find that don't have an 'n' option (like me on RedHat) you can use cp -u to only write the file if the source is newer than the existing one (or there isn't an existing one).

[edit] As mentioned in the comments, this will overwrite older files, so isn't exactly what the OP wanted. Use ceving's answer for that.

各自安好 2025-01-15 18:35:27

Alpine linux:以下答案仅适用于单个文件的情况:在 alpine 中 cp -n 不起作用(并且 false | cp -i ... 也是)所以我发现在我的情况下工作的解决方案是:

if [ ! -f env.js ]; then cp env.example.js env.js; fi 

在上面的示例中,如果 env.js 文件不存在,那么我们将 env.example.js 复制到 env.js

Alpine linux: Below answer is only for case of single file: in alpine cp -n not working (and false | cp -i ... too) so solution working in my case that I found is:

if [ ! -f env.js ]; then cp env.example.js env.js; fi 

In above example if env.js file not exists then we copy env.example.js to env.js.

青春有你 2025-01-15 18:35:27

某些版本的 cp 没有 --no-clobber 选项。在这种情况下:

  echo n | cp -vipr src/* dst

Some version of cp do not have the --no-clobber option. In that case:

  echo n | cp -vipr src/* dst
他不在意 2025-01-15 18:35:27

这对我有用
是的| cp -i 源 目标

This works for me
yes n | cp -i src dest

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文