检查shell脚本中子目录中是否存在目录

时间:2016-09-05 05:50:37

标签: shell unix directory

什么命令使用shell脚本检查另一个路径中是否存在目录?

我搜索了这个,但我找到的只是检查目录中是否存在"当前" 。目录

if [ -d "$DIRECTORY" ]; then
  # found "any" directory
fi

当我想知道是否"任何"时,这并不令人满意。目录存在于另一个目录中。

if [ -d "./PATH/$DIRECTORY" ]; then
  # found "any" directory in subdirectory
fi

显然这不起作用。这仍然从当前工作目录检查,而不是我给出的路径。

有什么建议吗?

我想在if条件下使用它,所以回答保持该形式会有所帮助。

修改

在shell脚本中我添加如下:

#!/bin/bash

ls -ld ./smth/world/
echo DIRECTORY=$DIRECTORY

if [ -d "./smth/$DIRECTORY/" ]; then
   echo hi
else
   echo nope
fi

在当前目录中,我有一个名为" smth"的目录。在里面" smth"我创建了一个虚拟目录" world"

编辑#2

在路径前添加点后,我得到以下内容:

drwxrwxr-x 2 (myname) (myname) 4096 Sep  5 14:39 ./smth/world/
DIRECTORY=
found

但是当我删除smth目录中的世界目录后,仍然得到"找到"。

1 个答案:

答案 0 :(得分:4)

那是另一种方式。 movsd如果是相对于当前目录的目录,./如果是完全指定的目录,例如:

如果提供目录的完整路径,则需要删除点:

/

如果if [ -d "/full/path/to/smth/$DIRECTORY" ]; then # found fi 目录与当前目录相关,则必须保留点:

PATH

如果未设置if [ -d "./smth/$DIRECTORY" ]; then # found fi 变量,前面的命令将检查DIRECTORY中是否存在名为PATH的目录,如果设置了smth变量,只有在DIRECTORY下有一个具有该值的子目录时,测试才会成功。

smth会告诉您是否设置了echo $DIRECTORY变量。