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

检查shell脚本的子目录中是否存在目录,shell,unix,directory,Shell,Unix,Directory,什么命令使用shell脚本检查另一个路径中是否存在目录 我对此进行了搜索,但我能找到的只是检查“当前”目录中是否存在一个目录 if [ -d "$DIRECTORY" ]; then # found "any" directory fi if [ -d "./PATH/$DIRECTORY" ]; then # found "any" directory in subdirectory fi 当我想知道另一个目录中是否存在“any”目录时,这并不满足 if [ -d "$DIRECT

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

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

if [ -d "$DIRECTORY" ]; then
  # found "any" directory
fi
if [ -d "./PATH/$DIRECTORY" ]; then
  # found "any" directory in subdirectory
fi
当我想知道另一个目录中是否存在“any”目录时,这并不满足

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
drwxrwxr-x 2 (myname) (myname) 4096 Sep  5 14:39 ./smth/world/
DIRECTORY=
found
在当前目录中,我有一个名为“smth”的目录。在“smth”中,我创建了一个虚拟目录“world”

编辑#2

在路径前面添加点后,我得到以下结果:

#!/bin/bash

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

if [ -d "./smth/$DIRECTORY/" ]; then
   echo hi
else
   echo nope
fi
drwxrwxr-x 2 (myname) (myname) 4096 Sep  5 14:39 ./smth/world/
DIRECTORY=
found

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

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

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

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

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


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

哇,我不敢相信我在将近30分钟后没有尝试过。我的排名还不够高,无法投票,但非常感谢您!隐马尔可夫模型。。。我不知道为什么,但这总是给我错误的印象。我在“路径”中创建了一个目录,然后编写了简单的代码“echo hi”,但没有打印任何内容。请编辑您的问题,并添加您运行的精确命令及其输出。已经完成了。这里真的没有什么可看的,但这就是我使用的代码。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请看这一页,还有你的问题不清楚。假设变量
目录
包含单词world。表达式“[-d”/smth/$DIRECTORY”]`或者
[[-d/smth/$DIRECTORY]]
都测试目录
/smth/world
(绝对路径)是否存在。如果您的测试没有显示所需的结果,我建议您(仅出于测试目的)在
If
语句之前执行
ls-ld/smth/world
echo DIRECTORY=$DIRECTORY
。如果你的目标是测试不同的东西,请重新表述你的问题。我根据你告诉我的内容编辑了我的问题,结果如下