我有一个两列文件;该文件已按照我想要的方式在第 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) 我想将一个文件从 A 复制到 B,它可能位于不同的文件系统上。
还有一些额外的要求:
我认为这很接近:
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)。有没有办法检测这样的文件系统?
其他一些相关但不完全相同的问题:
有没有办法在 eMMC 上以原子方式将文件和目录从 tempfs 移动到 ext4 分区
https://rcrowley.org/2010/01/06/things-unix-can-do-atomically.html