BASH如果目录包含文件或不包含文件

时间:2013-07-20 20:04:14

标签: bash shell

我创建了一个基于条件执行某些命令的脚本。如果目录包含文件,则运行" screen -r"其他任何东西运行"屏幕"。问题是即使目录包含文件,屏幕有时也会被执行。

if [ "$(ls -A $DIR)" ]; then
screen -r
else
screen
fi

我想要做的是改进它并将其分解为两个陈述。如果目录包含文件,则运行screen-r" &安培;如果一个目录没有包含文件运行"屏幕"

if [ "$(ls -A $DIR)" ]; then
screen -r
fi

&安培;

if ["$(directory without files)"] ; then
screen
fi

甚至可能是基于文件#执行的语句。如果目录包含X个文件。

有人可以帮我解决这个问题吗?我希望我能彻底解释我想要的东西。

谢谢,

Geofferey

再次感谢你的帮助,我现在全力以赴。这是最后的脚本。它适用于iPhone以及我制作的名为MobileTerm Backgrounder的应用程序。

#Sets up terminal environment? 

if [[ $TERM = network || -z $TERM ]]; then
export TERM=linux
fi

# This script automatically runs screen & screen -r (resume) based on a set of conditions. 

# Variable DIR (variable could be anything)

DIR="/tmp/screens/S-mobile"

# if /tmp/screens/S-mobile list files then run screen -x

if [ "$(ls -A $DIR)" ]; then
screen -x
fi

#if /tmp/screens/S-mobile contains X amount of files = to 0 then run screen -q

if [ $(ls -A "$DIR" | wc -l) -eq 0 ]; then
screen -q
fi

2 个答案:

答案 0 :(得分:2)

find可能会对您有所帮助:

if [[ $(find ${dir} -type f | wc -l) -gt 0 ]]; then echo "ok"; fi

UPD :什么是-gt

man bash - > / -gt/

   arg1 OP arg2
          OP is one of -eq, -ne, -lt, -le, -gt, or -ge.  These arithmetic binary operators return true if  arg1  is  equal  to,  not
          equal  to,  less than, less than or equal to, greater than, or greater than or equal to arg2, respectively.  Arg1 and arg2
          may be positive or negative integers.

因此,-gt是“大于”布尔函数。

答案 1 :(得分:1)

我会以这种方式使用lswc

if [ $(ls -A "$DIR" | wc -l) -gt 0 ]; then
   screen -r
else
   screen
fi

你必须双引号$DIR变量,否则你会遇到包含空格的目录名的问题。