仅当目录尚不存在时如何 mkdir ?
我正在编写一个在 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(17)
尝试
mkdir -p
:请注意,还将创建任何不存在的中间目录; 例如,
如果目录
foo
、foo/bar
和foo/bar/baz
不存在,则会创建它们。一些实现(例如 GNU mkdir )包含
mkdir --parents
作为更具可读性的别名,但这在 POSIX/Single Unix 规范中没有指定,并且在 macOS 等许多常见平台上不可用、各种BSD、以及各种商业Unix,所以应该避免。如果您希望在父目录不存在时出现错误,并且希望在不存在的情况下创建该目录,那么您可以
test
首先检查目录是否存在:Try
mkdir -p
:Note that this will also create any intermediate directories that don't exist; for instance,
will create directories
foo
,foo/bar
, andfoo/bar/baz
if they don't exist.Some implementation like GNU
mkdir
includemkdir --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:这应该有效:
或者:
如果目录不存在,它将创建该目录,但如果您尝试创建的目录名称已被目录以外的其他内容使用,则会发出警告。
This should work:
or:
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.
使用 -p 标志。
Use the -p flag.
用一个命令定义复杂的目录树
Defining complex directory trees with one command
如果您不想显示任何错误消息:
如果您想显示您自己的错误消息:
If you don't want to show any error message:
If you want to show your own error message:
即使目录存在,
mkdir foo
也能工作。要使其仅在名为“foo”的目录不存在时才起作用,请尝试使用
-p
标志。示例:
仅当名为“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:
This will create the directory named "foo" only if it does not exist. :)
您可以使用
if
语句来检查目录是否存在。 如果不存在,则创建该目录。dir=/home/dir_name
您可以使用带有 -p 选项的 mkdir 来创建目录。 它将检查该目录是否不可用。
mkdir -p 还允许创建目录的树结构。 如果你想使用同一个命令创建父目录和子目录,可以选择 mkdir -p
You can either use an
if
statement to check if the directory exists or not. If it does not exits, then create the directory.dir=/home/dir_name
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 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
简单、沉默、致命:
Simple, silent and deadly:
老的尝试和真实的
将做你想要的,没有任何其他解决方案所具有的竞争条件。
有时最简单(也是最丑陋)的解决方案是最好的。
The old tried and true
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.
mkdir 在 Windows 8+ 系统上不再支持 -p 开关。
你可以使用这个:
mkdir does not support -p switch anymore on Windows 8+ systems.
You can use this:
这是一个简单的函数(Bash shell),如果目录不存在,它可以让您创建一个目录。
您可以将上述函数调用为:
如果 fooDir 和 BarDir 不存在,上面将创建它们。 请注意 mkdir 命令中的“-p”选项,该选项以递归方式创建目录。
This is a simple function (Bash shell) which lets you create a directory if it doesn't exist.
You can call the above function as:
The above creates fooDir and BarDir if they don't exist. Note the "-p" option in the mkdir command which creates directories recursively.
参考手册页
man mkdir
的选项 -p
,它将在给定路径中创建所有目录,如果存在则不会抛出任何错误,否则它将在给定路径中从左到右创建所有目录给定路径。 尝试以下命令。 在发出此命令之前,目录
newdir
和anotherdir
不存在正确用法
mkdir -p /tmp/newdir/anotherdir
执行命令后可以看到 /tmp 下创建了
newdir
和anotherdir
。 您可以多次发出此命令,该命令始终带有exit(0)
。 由于这个原因,大多数人在使用这些实际路径之前在 shell 脚本中使用此命令。Referring to man page
man mkdir
for option -p
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
andanotherdir
doesn't exists before issuing this commandCorrect Usage
mkdir -p /tmp/newdir/anotherdir
After executing the command you can see
newdir
andanotherdir
created under /tmp. You can issue this command as many times you want, the command always haveexit(0)
. Due to this reason most people use this command in shell scripts before using those actual paths.或者,如果您想先检查是否存在:
-e 是 的存在测试康壳。
您还可以尝试用谷歌搜索 KornShell 手册。
Or if you want to check for existence first:
-e is the exist test for KornShell.
You can also try googling a KornShell manual.
对“经典”解决方案(由 Brian Campbell 提出)的改进 - 处理目录符号链接的情况。
Improvement on the 'classic' solution (by Brian Campbell) - to handle the case of symlink to a directory.