代码之家  ›  专栏  ›  技术社区  ›  Spike Williams

如何仅在目录不存在时才使用mkdir?

  •  1506
  • Spike Williams  · 技术社区  · 15 年前

    我正在编写一个shell脚本,在AIX上的KornShell(ksh)下运行。我想使用 mkdir mkdir 尝试创建现有目录时引发。

    14 回复  |  直到 4 年前
        1
  •  3933
  •   Brian Campbell Dennis Williamson    6 年前

    尝试 mkdir -p

    mkdir -p foo
    

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

    mkdir -p foo/bar/baz
    

    将创建目录 foo , foo/bar foo/bar/baz

    一些实现,比如GNU mkdir 包括 mkdir --parents 作为一个可读性更高的别名,但POSIX/Single Unix规范中未指定此别名,并且在许多常见平台(如macOS、各种BSD和各种商用Unix)上都不可用,因此应避免使用此别名。

    test 对于目录的存在,请首先执行以下操作:

    [ -d foo ] || mkdir foo
    
        2
  •  204
  •   Alnitak    15 年前

    $ mkdir -p dir
    

    或:

    if [[ ! -e $dir ]]; then
        mkdir $dir
    elif [[ ! -d $dir ]]; then
        echo "$dir already exists but is not a directory" 1>&2
    fi
    

    如果目录不存在,它将创建该目录,但如果您试图创建的目录的名称已被目录以外的其他对象使用,则会发出警告。

        3
  •  98
  •   jimmyorr    15 年前

    man mkdir
    mkdir -p foo
    
        4
  •  79
  •   Oleg    11 年前

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

    mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
    
        5
  •  46
  •   Jahid Ramsy de Vos    9 年前

    [ -d newdir ] || mkdir newdir
    

    [ -d newdir ] && echo "Directory Exists" || mkdir newdir
    
        6
  •  25
  •   paxdiablo    12 年前

    老一套是千真万确的

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

    将做你想做的事情,而不需要任何其他解决方案所具备的竞争条件。

        7
  •  21
  •   Peter Mortensen venu    4 年前

    mkdir foo 即使目录存在也可以工作。 要使其仅在名为“foo”的目录不存在时工作,请尝试使用 -p 旗帜

    例子:

    mkdir -p foo
    

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

        8
  •  15
  •   Peter Mortensen venu    4 年前

    if

    1. dir=/home/dir\u name

      if [ ! -d $dir ]
      then
           mkdir $dir
      else
           echo "Directory exists"
      fi
      
    2. mkdir -p $dir
      

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

      mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
      
        9
  •  14
  •   Karanvir Kang    8 年前

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

    IF NOT EXIST dir_name MKDIR dir_name
    
        10
  •  13
  •   WonderWorker Sakal    8 年前
    directory_name = "foo"
    
    if [ -d $directory_name ]
    then
        echo "Directory already exists"
    else
        mkdir $directory_name
    fi
    
        11
  •  10
  •   vkrams rolling stone    6 年前

    参考手册页 man mkdir 供选择- p

       -p, --parents
              no error if existing, make parent directories as needed
    

    newdir anotherdir 在发出此命令之前不存在

    mkdir -p /tmp/newdir/anotherdir

    执行命令后,您可以看到 纽迪尔 另一个 exit(0) . 由于这个原因,大多数人在使用那些实际路径之前在shell脚本中使用这个命令。

        12
  •  10
  •   Peter Mortensen venu    4 年前

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

    if [[ ! -e /path/to/newdir ]]; then
                mkdir /path/to/newdir
    fi
    

    是否存在测试 KornShell .

    你也可以在谷歌上搜索科恩希尔手册。

        13
  •  6
  •   hakre    3 年前

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

    #------------------------------------------#
    # 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-d dir example.XXXXX)/fooDir/BarDir”

        14
  •  4
  •   moodboom    4 年前

    简单、沉默、致命:

    mkdir -p /my/new/dir >/dev/null 2>$1
    
        15
  •  3
  •   Draken R. Shilling    6 年前
    mkdir -p sam
    
    • mkdir=生成目录
    • -p=--父母
        16
  •  2
  •   Alex Zubkov    4 年前
    if [ !-d $dirName ];then
         if ! mkdir $dirName; then  # Shorter version. Shell will complain if you put braces here though
         echo "Can't make dir: $dirName"
         fi
    fi