检查外壳脚本的子目录中是否存在目录

Hum*_*gar 1 unix directory shell

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

我对此进行了搜索,但我能找到的只是检查“当前”目录中是否存在目录。

if [ -d "$DIRECTORY" ]; then
  # found "any" directory
fi
Run Code Online (Sandbox Code Playgroud)

当我想知道另一个目录中是否存在“ any”目录时,这不能满足要求。

if [ -d "./PATH/$DIRECTORY" ]; then
  # found "any" directory in subdirectory
fi
Run Code Online (Sandbox Code Playgroud)

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

有什么建议么?

我想在if条件下使用它,因此回答保留该表格将很有帮助。

编辑

在shell脚本中,我添加了以下内容:

#!/bin/bash

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

if [ -d "./smth/$DIRECTORY/" ]; then
   echo hi
else
   echo nope
fi
Run Code Online (Sandbox Code Playgroud)

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

编辑#2

在路径前面添加点后,得到以下信息:

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

但是,在删除smth目录中的world目录之后,仍然会找到“ found”。

jll*_*gre 5

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

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

if [ -d "/full/path/to/smth/$DIRECTORY" ]; then
  # found 
fi
Run Code Online (Sandbox Code Playgroud)

如果PATH目录相对于当前目录,则必须保留该点:

if [ -d "./smth/$DIRECTORY" ]; then
  # found
fi
Run Code Online (Sandbox Code Playgroud)

如果DIRECTORY变量没有设置,上述命令将检查是否有一个名为目录PATHsmth一个,如果DIRECTORY变量设置,如果没有与下该值的子目录中的测试才会成功smth

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