shuf 文件 --输出文件:就地改组

shuf 文件 --输出文件:就地改组

shuf命令有一个--output标志,您可以使用它来指定将其输出写入何处(而不是写入 stdout)。

我想就地打乱文件。shuf file --output file使用相同的文件名作为输出文件名和要读取的文件是否安全?

或者这会导致文件损坏吗?它是特定于平台的吗?当我在一个小文件上测试时,它似乎工作正常,但手册页没有说明这一点,我不确定是否要担心它。

答案1

是的 -根据文档- 就地洗牌文件应该是安全的:

-o output-file
--output=output-file
将输出写入输出文件而不是标准输出。shuf打开之前读取所有输入输出文件shuf -o F <F,因此您可以使用和等命令安全地对文件进行适当的洗牌cat F | shuf -o F

答案2

正如您所说,对一个小文件进行现场测试似乎可以满足您的要求,但如果您想安全,最好的选择是写入临时文件,然后将新文件交换到:

#!/bin/bash
scratch=$(mktemp)
trap 'rm -f "$scratch"' EXIT
if [[ -r "$1" ]]; then
    shuf "$1" --output "$scratch" && mv "$scratch" "$1"
fi

上面的脚本可以保存为例如shuf_in_place您的PATH.

相关内容