私は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
rm -f empty.txt
touch full.txt
else
rm -f full.txt
touch empty.txt
fi
私が好きなシェルスクリプトをたくさん、それの一つの欠点は、あなたが間違えたときにシェルがあなたのC++コンパイラできるようなコンパイラのに対し、あなたを助けることができないということです助けます。
@Matthiasが示唆しているように、偶然にもempty.txt
とfull.txt
の役割を交換したことに注目してください。
シェルはスペルミスを助けることができます。 'empty = empty.txt; full = full.txt; diff = diff.txt; if [-s $ {diff?}];次に、r = $ {empty?} t = $ {full?};そうでなければr = $ {full?} t = $ {empty?}; fi; rm $ {r?}; touch $ {t?} ' –
ツールのシェルチェックを使用すると、スペルミスがうまく見つかります。 – Yokai
ファイルが存在しない場合、これは失敗しますか?これは、ファイルが空であるかどうかのチェックであると考えられます。 – geedoubleya
[[-sファイル] - 必要な場合は、ファイルが0
if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi
よりも大きなサイズを持っている場合>チェックが、これは現在のディレクトリ内のすべての* .txtファイルをチェックします。
for file in $(ls *.txt); do if [[ ! -s $file ]]; then echo $file; fi; done
他の回答が正しいですが、また、ファイルが表示されます"-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
[-s FILE] FILEが存在し、サイズが0より大きい場合は真です。 したがって、 "diff.txt"が空でない場合は "empty.txt"となります。 – Matthias
PS:実際の 'diff'呼び出しをチェックしたい場合は、戻り値をチェックしてください:' if diff foo.txt bar.txt; then echo 'No difference'' – l0b0
テストは否定できます: '[[! -s diff.txt]; echo "IS EMPTY"; else echo "HAS SOMETHING"; fi' –