如何mkdir只有当一个目录不存在?

我正在编写一个外壳脚本,以便在AIX上的KornShell(ksh)下运行。我想使用mkdir命令创建一个目录。但是该目录可能已经存在,在这种情况下我不想做任何事情。所以我想测试该目录是否不存在,或者抑制mkdir在尝试创建现有目录时抛出的“文件存在”错误。

我怎样才能最好地做到这一点?

1774996 次浏览

尝试#0

mkdir -p foo

请注意,这也将创建任何不存在的中间目录;例如,

mkdir -p foo/bar/baz

将创建目录foofoo/barfoo/bar/baz(如果它们不存在)。

像GNUmkdir这样的一些实现包括mkdir --parents作为更具可读性的别名,但这在POSIX/单一Unix规范中没有指定,并且在许多常见平台(如macOS、各种BSD和各种商业Unix)上不可用,因此应该避免。

如果您希望在父目录不存在时出现错误,并且想要在不存在时创建目录,那么您可以首先#0查找目录的存在:

[ -d foo ] || mkdir foo

使用-p标志。

man mkdirmkdir -p foo

这应该工作:

$ mkdir -p dir

或:

if [[ ! -e $dir ]]; thenmkdir $direlif [[ ! -d $dir ]]; thenecho "$dir already exists but is not a directory" 1>&2fi

如果目录不存在,它将创建目录,但如果您尝试创建的目录的名称已被目录以外的其他东西使用,则会警告您。

或者如果你想先检查是否存在:

if [[ ! -e /path/to/newdir ]]; thenmkdir /path/to/newdirfi

-eKornShell的存在测试。

您也可以尝试在Google上搜索KornShell手册。

旧的尝试和真实

mkdir /tmp/qq >/dev/null 2>&1

将做你想要的,没有竞争条件的许多其他解决方案。

有时最简单(最丑陋)的解决方案是最好的。

用一个命令定义复杂的目录树

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

mkdir foo即使目录存在也有效。要使其仅在名为“foo”的目录不存在时工作,请尝试使用-p标志。

示例:

mkdir -p foo

这将创建名为“foo”的目录,仅当它不存在时。:)

如果您不想显示任何错误消息:

[ -d newdir ] || mkdir newdir

如果您想显示自己的错误消息:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir
directory_name = "foo"
if [ -d $directory_name ]thenecho "Directory already exists"elsemkdir $directory_namefi

mkdir不再支持Windows 8+系统上的-p开关。

你可以使用这个:

IF NOT EXIST dir_name MKDIR dir_name

这是一个简单的函数(Bash shell),它允许您在目录不存在时创建目录。

#------------------------------------------## Create a directory if it does not exist. ##------------------------------------------## Note the "-p" option in the mkdir        ## command which creates directories        ## recursively.                             ##------------------------------------------#createDirectory() {mkdir -p -- "$1"}

您可以将上述函数调用为:

CreateDirectory"$(mktemp-ddir-example.XXXXX)/foDir/BarDir"//创建目录//创建目录

如果不存在,上面的代码会创建foDir和BarDir。请注意mkdir命令中的“-p”选项,它以递归方式创建目录。

mkdir -p sam
  • mkdir=制作目录
  • -p=--父母
  • (如果存在则无错误,根据需要制作父目录)

您可以使用if语句来检查目录是否存在。如果它不退出,则创建目录。

  1. dir=/home/dir_name

    if [ ! -d $dir ]thenmkdir $direlseecho "Directory exists"fi
  2. You can directory use mkdir with -p option to create a directory. It will check if the directory is not available it will.

    mkdir -p $dir

    mkdir-p还允许创建目录的树结构。如果您想使用相同的命令创建父目录和子目录,可以选择mkdir-p

    mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2

参考手册页man mkdir的选项-p

   -p, --parentsno error if existing, make parent directories as needed

这将在给定路径中创建所有目录,如果存在则不抛出错误,否则它将在给定路径中从左到右创建所有目录。尝试以下命令。在发出此命令之前,目录newdiranotherdir不存在

正确用法

mkdir -p /tmp/newdir/anotherdir

执行命令后,您可以看到在 /tmp.下创建的newdiranotherdir您可以多次发出此命令,该命令始终具有exit(0)。由于这个原因,大多数人在使用实际路径之前在shell脚本中使用此命令。

if [ !-d $dirName ];thenif ! mkdir $dirName; then  # Shorter version. Shell will complain if you put braces here thoughecho "Can't make dir: $dirName"fifi

简单,沉默,致命:

mkdir -p /my/new/dir >/dev/null 2>&1

对经典解决方案的改进(Brian Campbell)-处理指向目录的符号链接的情况。

[ -d foo/. ] || mkdir foo