相关疑难解决方法(0)

如何以事务方式复制文件?

我想将一个文件从 A 复制到 B,它可能位于不同的文件系统上。

还有一些额外的要求:

  1. 副本是全有或全无,崩溃时没有部分或损坏的文件 B 留在原地;
  2. 不要覆盖现有的文件 B;
  3. 不要与同一命令的并发执行竞争,最多一个可以成功。

我认为这很接近:

cp A B.part && \
ln B B.part && \
rm B.part
Run Code Online (Sandbox Code Playgroud)

但是 3. 如果 B.part 存在(即使使用 -n 标志),则 cp 不会失败。随后 1. 如果另一个进程“赢得”cp 并且链接到位的文件不完整,则可能会失败。B.part 也可能是一个不相关的文件,但我很高兴在这种情况下没有尝试其他隐藏名称而失败。

我认为 bash noclobber 有帮助,这是否完全有效?有没有办法在没有 bash 版本要求的情况下获得?

#!/usr/bin/env bash
set -o noclobber
cat A > B.part && \
ln B.part B && \
rm B.part
Run Code Online (Sandbox Code Playgroud)

后续,我知道一些文件系统无论如何都会失败(NFS)。有没有办法检测这样的文件系统?

其他一些相关但不完全相同的问题:

跨文件系统的近似原子移动?

我的 fs 上的 mv 是原子的吗?

有没有办法在 eMMC 上以原子方式将文件和目录从 tempfs 移动到 ext4 分区

https://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html

linux bash cp

10
推荐指数
1
解决办法
1962
查看次数

Rsync 临时文件扩展名

如果我不使用 --inplace 选项,我很难找到 Rsync 如何“选择”复制文件时创建的临时文件的扩展名。

示例:我想用 Rsync复制sourceDirectory/myFile.txttargetDirectory/

虽然复制myFile.txttargetDirectory/Rsync的将创建一个名为文件.myFile.txt.W4zvLitargetDirectory/

然后 Rsync 将重命名.myFile.txt.W4zvLimyFile.txt.

问题是为什么 Rsync 使用W4zvLi扩展以及为什么每次执行 Rsync 程序时它似乎都会改变?

rsync filenames

4
推荐指数
1
解决办法
2715
查看次数

标签 统计

bash ×1

cp ×1

filenames ×1

linux ×1

rsync ×1