データがある場合にのみファイルを上書きする

データがある場合にのみファイルを上書きする

コマンド出力でファイルを上書きしようとしていますが、出力が出る前は上書きされません。つまり、私は普通

mycommand > myfile

しかし、空のデータで上書きされるのであれば、以前のバージョンをmyfile維持したいのですが、myfile何かを使えばifne可能だと思います。

mycommand | ifne (cat > myfile) 

しかし、これはうまくいきません...

間接的な方法

mycommand | tee mytempfile | ifne mv mytempfile myfile

動作しますが、一時ファイルを使用することはエレガントではないと思います。

尋ねる:最初のアイデアはなぜ効果がなかったのですか?動作させることができますか?それとも私の元の問題に対するもう一つの良い解決策はありますか?

ベストアンサー1

最初の方法が機能したら、次のコマンドを実行しますifne(参考文献を参照man ifne)。

NAME
       ifne - Run command if the standard input is not empty

SYNOPSIS
       ifne [-n] command

DESCRIPTION
       ifne  runs  the  following command if and only if the standard input is
       not empty.

だから実行コマンドを与えなければなりません。ほぼすべてが来てtee働く準備ができました。

command | ifne tee myfile > /dev/null

コマンドによって生成されるデータが多くなく、データが変数に入るのに十分小さい場合は、次のこともできます。

var=$(mycommand)
[[ -n $var ]] && printf '%s\n' "$var" > myfile

おすすめ記事