Bash脚本 - 在空文件上测试-s为真吗?

时间:2014-07-30 16:01:43

标签: bash scripting

所以我对此感到困惑,并不能真正理解为什么会这样。希望有人能够启发我!

我有grep将其结果推送到名为out的文件。然后我有以下代码....

if [ -s out ]; then
   xargs -n1 basename < out
else
   echo "NO FILES EXIST"
fi

if path工作文件,但当文件大小为0时,它不会沿着else路径运行...

然后我尝试了这个......

if [ ! -s out ]; then
   xargs -n1 basename < out
else
   echo "NO FILES EXIST"
fi

一切都按预期工作,但相反(显然)......

所以我的问题是,我不知道幕后的-s旗帜是什么?这完全让我心烦意乱。如果有人能够对此有所了解,那将非常感激!

谢谢!


ls -lrt - 文件的输出不会在其他路径下移动。如果我添加!运算符,文件将沿if路径路径向下,然后如果文件填充它将沿着else路径向下。

0 Jul 30 12:15 out

建议将$ filename变为一个变量并以此方式传递它,这是不幸的。我想也许它与我的grep有关?整个代码如下:

grep -l 'TimeStamp: '$2'/'$3'/'$1 $ARCHIVE/*/* > $filename
if [ -s "$filename" ]; then
   xargs -n1 basename < out
else
   echo "NO FILES EXIST"
fi

$ 1,$ 2,$ 3分别是yyyy,mm,dd。

另一个想法是它可能是我的机器?我正在运行Linux Ubuntu 3.2.0-58-generic。

谢谢!

2 个答案:

答案 0 :(得分:1)

无法重现它。你能按照以下步骤操作:

touch test.txt
[ -s "test.txt" ] && echo "empty"


不过,这可能更像是一个清除而不是答案的问题,可能是一个评论,我只想让两个命令尽可能可读。

答案 1 :(得分:1)

-s FILE:         True if file exists and is not empty

您提到文件存在,并且其大小为零,因此测试应为True

尝试使用文件的完整路径,而不仅仅是out。例如&GT;

if [ -s /full/path/to/out ]; then
   xargs -n1 basename < out
else
   echo "NO FILES EXIST"
fi

我认为问题不在于测试本身,而在于脚本运行的路径。