如何在Linux中检查目录是否存在?

32

如何在Linux或Shell脚本中,通过文件路径(例如/src/com/mot)检查是否存在mot文件夹,并在其不存在时创建它?


3
这个问题的回答是否解决了您的疑问?如何在Bash shell脚本中检查目录是否存在? - Josh Correia
6个回答

31

使用 bash/sh/ksh,你可以这样做:

if [ ! -d /directory/to/check ]; then
    mkdir -p /directory/toc/check
fi

对于文件,将-d替换为-f,然后你可以在不存在的文件上执行任何操作。


7
你实际上不需要检查。mkdir -p 不会针对已存在的目录执行操作。 - thiton
2
这是一个很好的观点。我会保留它,因为它为OP提供了框架,以防他们在mkdir之前想做其他事情。 - Chris J
1
请注意,在第一行和第二行之间创建目录的情况下,这会导致竞争条件。 - Sjoerd
2
@Sjoerd,确实如此,但是那个竞态条件(虽然概率小得多)也会在您只使用“mkdir -p”时发生(除非某些文件系统实现并公开了原子检查或创建函数调用)。至少在上面的代码中,如果因为已存在目录而误调用,mkdir调用不会失败(因为提供了“-p”选项)。 - Christian.K
@WilliamPursell 抱歉,我不明白。根据这里的说明,如果指定的目录已经存在,mkdir(2)将失败并返回EEXIST。这与mkdir(1) -p的行为不同。至少在Solaris上(我不知道Linux),-p选项的行为是使用库例程实现的,该例程使用access()mkdir()迭代每个路径组件 - 不是原子操作。但是,也许我完全误解了你的评论;-) - Christian.K
显示剩余2条评论

10

检查目录是否存在

if [ -d "$DIRPATH" ]; then
    # Add code logic here 
fi

检查目录不存在

if [ ! -d "$DIRPATH" ]; then
    # Add code logic here
fi

9

mkdir -p 命令可以创建目录,如果目录已经存在也不会报错。


7

如果您只是检查目录是否存在来创建目录,那么您可以直接使用以下代码:

mkdir -p /src/com/mot

mkdir -p 命令会在目录不存在时创建目录,否则不会进行操作。


6
test -d /src/com/mot || mkdir /src/com/mot

3

这很基础,但我认为它有效。如果你想要一个动态列表来循环检查,你需要设置一些变量。

if [ -d /src/com/mot ];
then
    echo Directory found
else
    mkdir /src/com/mot
fi

希望这正是您想要的...

你在if语句的右括号']'之后没有加上分号';'。 - Christian.K
@Chirstian 在 ']' 后面不需要加 ';',而且 ']' 不是一个闭合括号。在命令 '[' 的情况下,尾随的 ']' 只是该命令的参数。换行符与分号具有相同的作用。 - William Pursell
@WilliamPursell 我的评论是关于问题的第一个修订版本,该版本在“test”命令(或“括号”,抱歉错称)的“]”后没有换行符,在这种情况下,需要在then之前加上;,不是吗? - Christian.K
@christian,是的,需要换行符或分号。当我看到这个问题时,换行符已经在那里了。 - William Pursell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接