小编Eva*_*enn的帖子

当排序不知道排序顺序时,GNU 排序稳定排序

我有一个两列文件;该文件已按照我想要的方式在第 1 列中排序。我想在每个第 1 列类别中的第 2 列上进行排序。但是,sort不了解第 1 列的排序顺序。

正常的方法(来自堆栈上的类似问题)是这样的:

sort --stable -k1,1 -k2,2n
Run Code Online (Sandbox Code Playgroud)

但是我不能在 k1 上指定排序,因为它是任意的。

示例输入:

C 2
C 1
A 2
A 1
B 2 
B 1
Run Code Online (Sandbox Code Playgroud)

和输出:

C 1
C 2
A 1
A 2
B 1 
B 2
Run Code Online (Sandbox Code Playgroud)

sort

18
推荐指数
2
解决办法
1577
查看次数

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

我想将一个文件从 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
查看次数

标签 统计

bash ×1

cp ×1

linux ×1

sort ×1