この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
。