diff.txtというファイルがあります。空かどうかを確認したい。
以下のようなbashスクリプトを書きましたが、うまくいきませんでした。
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
diff.txtというファイルがあります。空かどうかを確認したい。
以下のようなbashスクリプトを書きましたが、うまくいきませんでした。
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
スペルミスはイライラしますね。のつづりを確認してから、次のempty
ことも試してください。
#!/bin/bash -e
if [ -s diff.txt ]; then
# The file is not-empty.
rm -f empty.txt
touch full.txt
else
# The file is empty.
rm -f full.txt
touch empty.txt
fi
私はシェル スクリプトが大好きですが、その欠点の 1 つは、スペルを間違えたときにシェルが役に立たないことです。一方、C++ コンパイラのようなコンパイラが役に立ちます。
ちなみに、@Matthias が示唆するように、empty.txt
との役割を交換したことに注意してください。full.txt
[ -s file.name ] || echo "file is empty"
他の答えは正しいですが、"-s"
オプションを使用すると、ファイルが存在しなくてもファイルが空であることも示されます。
この追加のチェック"-f"
を追加して、最初にファイルが存在するかどうかを確認することで、結果が正しいことを確認します。
if [ -f diff.txt ]
then
if [ -s diff.txt ]
then
rm -f empty.txt
touch full.txt
else
rm -f full.txt
touch empty.txt
fi
else
echo "File diff.txt does not exist"
fi
ファイルが空か空白のみかどうかを確認するには、grep を使用できます。
if [[ -z $(grep '[^[:space:]]' $filename) ]] ; then
echo "Empty file"
...
fi