我可以使用带有 -b 选项的 'cp' 命令,但如果备份文件已经存在,它会失败吗?

Chr*_*ltz 4 backup file-copy

我想cp -b用来将文件复制到目标,如果目标路径已经存在,可能会创建目标路径的备份文件。但是,如果备份文件已经存在,我希望cp失败并出现错误。

我知道我可以-n用来避免破坏目标文件,但我想拒绝破坏备份文件。

有没有办法做到这一点?我碰巧cp在 Linux上使用 GNU ,如果没有 POSIX 选项可用,我愿意接受特定于 Linux 的答案。

Joh*_*024 6

如果您想避免使用 GNU 破坏任何备份文件cp,您可以使用编号备份:

cp --backup=t  source destination
Run Code Online (Sandbox Code Playgroud)

这不会覆盖备份,而是创建额外的备份。

例子

例如,让我们考虑一个包含两个文件的目录:

$ ls
file1  file2
Run Code Online (Sandbox Code Playgroud)

现在,让我们将 file1 复制到 file2 上:

$ cp --backup=t file1 file2
$ ls
file1  file2  file2.~1~
Run Code Online (Sandbox Code Playgroud)

如我们所见,已进行备份。

我们再复制一遍:

$ cp --backup=t file1 file2
$ ls
file1  file2  file2.~1~  file2.~2~
Run Code Online (Sandbox Code Playgroud)

又做了一次备份。

文档

man cp,就在“描述”部分结束之前,--backup逐项列出了各种可能的选项:

备份后缀是“~”,除非用 --suffix 或 SIMPLE_BACKUP_SUFFIX 设置。可以通过 --backup 选项或通过 VERSION_CONTROL 环境变量选择版本控制方法。以下是值:

none, off
     从不进行备份(即使给出了 --backup )

编号,t
     进行编号备份

存在,
     如果存在编号的备份,则编号为零,否则简单

简单,永远不要
     做简单的备份

作为一种特殊情况,当给定 force 和 backup 选项并且 SOURCE 和 DEST 与现有常规文件的名称相同时,cp 会备份 SOURCE。