关于linux:检查目录是否不存在

Check if directory does not exist

本问题已经有最佳答案,请猛点这里访问。

我编写了一个脚本来签入var/log目录,它将获取其中的所有目录,并检查这些目录中是否存在存档目录。如果一个归档目录不存在,我想创建它,但是一旦创建了它,脚本就会再次尝试创建它。

1
2
3
4
5
6
7
8
vdir=$(sudo sh -c"find /var/log/ -maxdepth 1 -type d ! -name"archive"" )
for i in $vdir ;do
    echo $i
    if [[ ! -d $i/$arc ]];then
        sudo sh -c"mkdir $i/$arc"
        echo"$date:$HN:Creating:$i/$arc:directory">> logrotation.log
    fi
done

当我执行上面的代码时,它给出了这个错误。似乎脚本没有检查条件。

1
mkdir: cannot create directory ‘/var/log/speech-dispatcher/archive’: File exists


问题是你有两个[符号。您只需要一个:

1
          if [ ! -d $i/$arc ];then

另外一点:一些shell版本不处理紧靠右括号的;。因此,我建议这样格式化以获得最佳兼容性:

1
          if [ ! -d $i/$arc ] ; then

编辑:由于以上没有帮助,更多的想法:

同样,您的脚本在运行时也可能无法实际读取$i目录的内容,因此测试将始终失败(实际上是成功的)。但是,当您通过sudo创建根目录时,它已经存在。

[在sudo下运行整个脚本比只运行某些脚本更有效。]