我有一个名为diff.txt的文件。想检查它是否为空。做过这样的事情却无法让它发挥作用。
if [ -s diff.txt ]
then
touch empty.txt
rm full.txt
else
touch full.txt
rm emtpy.txt
fi
答案 0 :(得分:188)
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
我非常喜欢shell脚本,但是它的一个缺点是,当你拼错时,shell无法帮助你,而像你的C ++编译器这样的编译器可以帮助你。
顺便提一下,我已经交换了empty.txt
和full.txt
的角色,正如@Matthias建议的那样。
答案 1 :(得分:57)
[ -s file.name ] || echo "file is empty"
答案 2 :(得分:38)
[[-s file]] - >检查文件的大小是否大于0
if [[ -s diff.txt ]]; then echo "file has something"; else echo "file is empty"; fi
如果需要,它会检查当前目录中的所有* .txt文件;并报告所有空文件:
for file in *.txt; do if [[ ! -s $file ]]; then echo $file; fi; done
答案 3 :(得分:6)
虽然其他答案都是正确的,但即使文件不存在,使用"-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
答案 4 :(得分:4)
@geedoubleya回答是我的最爱。
但是,我更喜欢这个
if [[ -f diff.txt && -s diff.txt ]]
then
rm -f empty.txt
touch full.txt
elif [[ -f diff.txt && ! -s diff.txt ]]
then
rm -f full.txt
touch empty.txt
else
echo "File diff.txt does not exist"
fi
答案 5 :(得分:3)
检查文件是否为空的最简单方法:
if [ -s /path-to-file/filename.txt ]
then
echo "File is not empty"
else
echo "File is empty"
fi
您也可以将其写在单行上:
[ -s /path-to-file/filename.txt ] && echo "File is not empty" || echo "File is empty"
答案 6 :(得分:1)
许多答案都是正确的,但我觉得它们可能更完整 /简单化等,例如:
# BASH4+ example on Linux :
typeset read_file="/tmp/some-file.txt"
if [ ! -s "${read_file}" ] || [ ! -f "${read_file}" ] ;then
echo "Error: file (${read_file}) not found.. "
exit 7
fi
如果$ read_file为空或没有,则退出该节目。我不止一次误读了最顶层的答案,意思相反。
答案 7 :(得分:1)
要检查文件是否为空或仅包含空白,可以使用grep:
if [[ -z $(grep '[^[:space:]]' $filename) ]] ; then
echo "Empty file"
...
fi
答案 8 :(得分:0)
我是来这里寻找如何删除空__init__.py
文件的,因为它们在Python 3.3+中是隐式的,并最终使用:
find -depth '(' -type f -name __init__.py ')' -print0 |
while IFS= read -d '' -r file; do if [[ ! -s $file ]]; then rm $file; fi; done
也(至少在zsh中)使用$ path作为变量也会破坏$ PATH env,因此会破坏打开的shell。无论如何,以为我会分享!
答案 9 :(得分:0)
[[ -f filename && ! -s filename ]] && echo "filename exists and is empty"