检查目录是不是不存在[重复]
Posted
技术标签:
【中文标题】检查目录是不是不存在[重复]【英文标题】:Check if directory does not exist [duplicate]检查目录是否不存在[重复] 【发布时间】:2017-06-11 15:26:54 【问题描述】:我编写了一个脚本来检查 var/log 目录,它会获取那里的所有目录并检查这些目录中是否有存档目录。如果存档目录不存在,我想创建它,但是一旦创建,脚本会尝试再次创建它。
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
当我执行上面的代码时,它给了我这个错误。似乎脚本没有检查条件。
mkdir: cannot create directory ‘/var/log/speech-dispatcher/archive’: File exists
【问题讨论】:
$arc
包含什么?
它是一个用于创建存档目录的变量,如下所述。 arc=存档
你不能在第一个sudo sh -c "find ..."
中嵌套双引号
【参考方案1】:
问题是您有两个 [
符号。你只需要一个:
if [ ! -d $i/$arc ];then
另外一点:某些 shell 版本不处理右括号旁边的 ;
。因此,我建议像这样格式化以获得最佳兼容性:
if [ ! -d $i/$arc ] ; then
编辑:由于上述内容对您没有帮助,更多想法:
您的脚本也完全有可能以您的身份运行,实际上无法读取$i
目录的内容,因此测试总是会失败(或实际上成功)。但是,当您通过 sudo 以 root 身份创建目录时,它已经存在。
[在 sudo 下运行整个脚本而不是只运行其中的某些部分也会更有效。]
【讨论】:
感谢您的帮助,我已经进行了此更改,没有任何反应。仍然在尝试创建目录,但是对于某些目录它可以工作。不知道是什么原因。 嗯?[[
是传统 [
的 Bash 增强替代品。只要它工作得很好(因为你的 shell 实际上是 Bash!)并且肯定不会产生 OP 描述的错误消息。以上是关于检查目录是不是不存在[重复]的主要内容,如果未能解决你的问题,请参考以下文章