仅当 Linux 中尚不存在时才创建目录仅当 Linux 中尚不存在时才创建目录仅当 Linux 中尚不存在时才创建目录仅当 Linux 中尚不存在时才创建目录
  • 业务
  • 目标
  • 支持
  • 关于
  • 联系我们
  • 登录
✕

仅当 Linux 中尚不存在时才创建目录

发表 admin at 2025年2月28日
类别
未分类
标签

创建目录时最好小心并防止出现错误,以防同一位置存在同名的文件或目录。

要在 Linux 中创建目录,请使用 mkdir 命令。毕竟它代表“创建目录”。这是一个非常简单的命令。

但是,当您尝试创建已存在的目录时,您会收到如下错误:

$ mkdir dir0
mkdir: cannot create directory ‘dir0’: File exists

这表明如果目录已经存在,mkdir 命令将不会尝试以任何方式创建或修改已经存在的目录。

但它也显示了一个错误,这不是您总是想要的,特别是如果您正在编写 bash 脚本。

要防止此错误,请使用 -p 标志和 mkdir 命令。

mkdir -p dirname

这样,虽然没有创建目录,但也不会显示任何错误。您的脚本将照常运行。

?
如果存在与您尝试创建的目录同名的文件或链接,您将收到相同的错误。为什么?因为Linux中一切都是文件。目录是一种特殊文件,其作用类似于其中所有文件的索引。

让我们在这里更详细地了解一些事情,并讨论防止此错误的各种方法。

方法 1:使用“-p”选项

如果您查看 mkdir 命令的联机帮助页,它具有“-p”标志。

在 mkdir 中使用“-p”标志是“如果存在则没有错误,根据需要创建父目录”。

当您使用“-p”标志时,mkdir 实用程序将检查同名的目录、文件、链接或管道是否不存在。

如果确实存在,它不会修改您现有的目录或文件,也不会显示错误消息。

mkdir -p dirname

当您创建自定义 bash 脚本并且不希望其执行因为此错误而停止时,这非常方便。

-p 还可用于创建嵌套目录结构。如果您想创建类似 dir1/dir2/dir3 的目录结构,并且层次结构中存在某些目录或不存在任何目录。

方法2:检查bash中的目录是否已存在

如果您正在编写 bash 脚本,则可以使用 if 条件并检查目录是否已存在。如果没有,则创建该目录。

这是示例代码:

if [ -d my_dir ]
then
    mkdir my_dir
fi

方法三:发送至虚空

大多数 UNIX 工具都有两个输出流:stdout 和 stderr。通常,stdout 和 stderr 这两个流都会打印到终端。但是您可以将正常输出流或错误流重定向到另一个文件。

因此,当 mkdir 命令向您的终端抛出错误时,您可以将其重定向到 void。

要重定向 stdout,请将其与“1”数字流描述符一起使用,对于 stderr,请使用数字流描述符“2”。您还可以使用“0”流描述符重定向标准输入。

要实际重定向输出,请使用适当的流描述符以及重定向运算符“>”

$ mkdir dir0 2> /dev/null

这会将 stderr 的输出发送到“/dev/null”设备,该设备会丢弃写入其中的任何内容。

这样做是完全安全的。正如我之前提到的,如果目录已经存在,则不会对其进行修改。仅显示错误消息。您在这里所做的就是抑制该错误消息。

就我个人而言,我会使用第一种方法,即使用 mkdir -p 命令来确保仅当同一位置不存在同名文件或目录时才创建目录。

©2015-2025 Norria support@norria.com