仅当目录尚不存在时如何 mkdir ?

发布于 2024-07-17 23:12:31 字数 197 浏览 11 评论 0原文

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

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

I am writing a shell script to run under the KornShell (ksh) on AIX. I would like to use the mkdir command to create a directory. But the directory may already exist, in which case I do not want to do anything. So I want to either test to see that the directory does not exist, or suppress the "File exists" error that mkdir throws when it tries to create an existing directory.

How can I best do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(17

日记撕了你也走了 2024-07-24 23:12:31

尝试 mkdir -p

mkdir -p foo

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

mkdir -p foo/bar/baz

如果目录 foofoo/barfoo/bar/baz 不存在,则会创建它们。

一些实现(例如 GNU mkdir )包含 mkdir --parents 作为更具可读性的别名,但这在 POSIX/Single Unix 规范中没有指定,并且在 macOS 等许多常见平台上不可用、各种BSD、以及各种商业Unix,所以应该避免。

如果您希望在父目录不存在时出现错误,并且希望在不存在的情况下创建该目录,那么您可以 test 首先检查目录是否存在:

[ -d foo ] || mkdir foo

Try mkdir -p:

mkdir -p foo

Note that this will also create any intermediate directories that don't exist; for instance,

mkdir -p foo/bar/baz

will create directories foo, foo/bar, and foo/bar/baz if they don't exist.

Some implementation like GNU mkdir include mkdir --parents as a more readable alias, but this is not specified in POSIX/Single Unix Specification and not available on many common platforms like macOS, various BSDs, and various commercial Unixes, so it should be avoided.

If you want an error when parent directories don't exist, and want to create the directory if it doesn't exist, then you can test for the existence of the directory first:

[ -d foo ] || mkdir foo
白色秋天 2024-07-24 23:12:31

这应该有效:

$ 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

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

This should work:

$ mkdir -p dir

or:

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

which will create the directory if it doesn't exist, but warn you if the name of the directory you're trying to create is already in use by something other than a directory.

无语# 2024-07-24 23:12:31

使用 -p 标志。

man mkdir
mkdir -p foo

Use the -p flag.

man mkdir
mkdir -p foo
东风软 2024-07-24 23:12:31

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

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

Defining complex directory trees with one command

mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}
Spring初心 2024-07-24 23:12:31

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

[ -d newdir ] || mkdir newdir

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

[ -d newdir ] && echo "Directory Exists" || mkdir newdir

If you don't want to show any error message:

[ -d newdir ] || mkdir newdir

If you want to show your own error message:

[ -d newdir ] && echo "Directory Exists" || mkdir newdir
耶耶耶 2024-07-24 23:12:31

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

示例:

mkdir -p foo

仅当名为“foo”的目录不存在时才会创建该目录。 :)

mkdir foo works even if the directory exists.
To make it work only if the directory named "foo" does not exist, try using the -p flag.

Example:

mkdir -p foo

This will create the directory named "foo" only if it does not exist. :)

栀梦 2024-07-24 23:12:31

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

  1. dir=/home/dir_name

    如果 [ !   -d $dir ] 
      然后 
           mkdir $dir 
      别的 
           echo "目录存在" 
      菲 
      
  2. 您可以使用带有 -p 选项的 mkdir 来创建目录。 它将检查该目录是否不可用。

    mkdir -p $dir 
      

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

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

You can either use an if statement to check if the directory exists or not. If it does not exits, then create the directory.

  1. dir=/home/dir_name

    if [ ! -d $dir ]
    then
         mkdir $dir
    else
         echo "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 also allows to create the tree structure of the directory. If you want to create the parent and child directories using same command, can opt mkdir -p

    mkdir -p /home/parent_dir /home/parent_dir/child1 /home/parent_dir/child2
    
萌梦深 2024-07-24 23:12:31

简单、沉默、致命:

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

Simple, silent and deadly:

mkdir -p /my/new/dir >/dev/null 2>&1
末が日狂欢 2024-07-24 23:12:31

老的尝试和真实的

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

将做你想要的,没有任何其他解决方案所具有的竞争条件。

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

The old tried and true

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

will do what you want with none of the race conditions many of the other solutions have.

Sometimes the simplest (and ugliest) solutions are the best.

去了角落 2024-07-24 23:12:31

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

你可以使用这个:

IF NOT EXIST dir_name MKDIR dir_name

mkdir does not support -p switch anymore on Windows 8+ systems.

You can use this:

IF NOT EXIST dir_name MKDIR dir_name
栩栩如生 2024-07-24 23:12:31
directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi
directory_name = "foo"

if [ -d $directory_name ]
then
    echo "Directory already exists"
else
    mkdir $directory_name
fi
淤浪 2024-07-24 23:12:31

这是一个简单的函数(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 -d dir-example.XXXXX)/fooDir/BarDir"

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

This is a simple function (Bash shell) which lets you create a directory if it doesn't exist.

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

You can call the above function as:

createDirectory "$(mktemp -d dir-example.XXXXX)/fooDir/BarDir"

The above creates fooDir and BarDir if they don't exist. Note the "-p" option in the mkdir command which creates directories recursively.

战皆罪 2024-07-24 23:12:31

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

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

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

正确用法

mkdir -p /tmp/newdir/anotherdir

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

Referring to man page man mkdir for option -p

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

which will create all directories in a given path, if exists throws no error otherwise it creates all directories from left to right in the given path. Try the below command. the directories newdir and anotherdir doesn't exists before issuing this command

Correct Usage

mkdir -p /tmp/newdir/anotherdir

After executing the command you can see newdir and anotherdir created under /tmp. You can issue this command as many times you want, the command always have exit(0). Due to this reason most people use this command in shell scripts before using those actual paths.

东走西顾 2024-07-24 23:12:31

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

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

-e的存在测试康壳

您还可以尝试用谷歌搜索 KornShell 手册。

Or if you want to check for existence first:

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

-e is the exist test for KornShell.

You can also try googling a KornShell manual.

心房的律动 2024-07-24 23:12:31

对“经典”解决方案(由 Brian Campbell 提出)的改进 - 处理目录符号链接的情况。

[ -d foo/. ] || mkdir foo

Improvement on the 'classic' solution (by Brian Campbell) - to handle the case of symlink to a directory.

[ -d foo/. ] || mkdir foo
度的依靠╰つ 2024-07-24 23:12:31
mkdir -p sam
  • mkdir = 创建目录
  • -p = --parents
  • (如果存在则没有错误,根据需要创建父目录)
mkdir -p sam
  • mkdir = Make Directory
  • -p = --parents
  • (no error if existing, make parent directories as needed)
与风相奔跑 2024-07-24 23:12:31
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
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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文