ファイルが存在するか、空でないか、他のファイルと同じかどうかを確認したいと思います。もしそうなら、何もしないでください。
同じでない場合はを使用してくださいcat "some text"
。
ファイルが存在しないか空であってもファイルを生成します。cat some text
いくつかの回避策を試しましたが、ある条件を満たすたびに別の条件が失敗するか、ファイルが存在しない場合は失敗します。
この問題を解決する最もクリーンな方法は何ですか?これらすべてがbashを使用していますか?
答え1
if [ -f file1 ] && [ -s file1 ] && [ -f file2 ] && [ -s file2 ] &&
cmp file1 file2 &>/dev/null; then
: do nothing in this case only
else
echo "some text" >file1
echo "some text" >file2 # or cp file1 file2
fi
コメントに基づく短いバージョン
if [ -s file1 ] && cmp file1 file2 &>/dev/null; then
: do nothing in this case only
else
echo "some text" >file1
echo "some text" >file2 # or cp file1 file2
fi
答え2
一つ作る
if ! ( [[ -s file1 ]] && cmp file1 file2 2>/dev/null 1>&2 )
then
echo "some text" >file1
cp file1 file2
fi
説明する:
-s file1 file1 が存在し、空でない場合は true と評価されます。
両方のファイルが存在し、同じ場合、cmpコマンドはステータスコードを0に設定します。
この場合、我々はそれらに触れたくないので、条件を無効にするために前に感嘆符を入れました。
答え3
使用cmp -s
オプション:
#!/bin/bash
if ! ( [[ -s file1 ]] && cmp -s file1 file2 )
then
echo "some text" > file1
cp file1 file2
fi
この-s
オプションはすべての出力を自動的に削除し、終了stdout
ステータスstderr
のみを返します。