我想cp -b
用来将文件复制到目标,如果目标路径已经存在,可能会创建目标路径的备份文件。但是,如果备份文件已经存在,我希望cp
失败并出现错误。
我知道我可以-n
用来避免破坏目标文件,但我想拒绝破坏备份文件。
有没有办法做到这一点?我碰巧cp
在 Linux上使用 GNU ,如果没有 POSIX 选项可用,我愿意接受特定于 Linux 的答案。
如果您想避免使用 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。
归档时间: |
|
查看次数: |
1029 次 |
最近记录: |