249

diff.txtというファイルがあります。空かどうかを確認したい。

以下のようなbashスクリプトを書きましたが、うまくいきませんでした。

if [ -s diff.txt ]
then
        touch empty.txt
        rm full.txt
else
        touch full.txt
        rm emtpy.txt
fi
4

10 に答える 10

312

スペルミスはイライラしますね。のつづりを確認してから、次の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

于 2012-04-01T13:52:14.340 に答える
95
[ -s file.name ] || echo "file is empty"
于 2014-12-30T18:03:15.823 に答える
15

他の答えは正しいですが、"-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
于 2017-10-05T11:48:42.653 に答える
13

ファイルが空か空白のみかどうかを確認するには、grep を使用できます。

if [[ -z $(grep '[^[:space:]]' $filename) ]] ; then
  echo "Empty file" 
  ...
fi
于 2019-08-08T15:52:56.570 に答える