Shell 脚本 - 如果目录不存在则创建目录
Posted
技术标签:
【中文标题】Shell 脚本 - 如果目录不存在则创建目录【英文标题】:Shell Script - Make directory if it doesn't exist 【发布时间】:2014-05-19 14:54:02 【问题描述】:我想输入一个目录的名称并检查它是否存在。
如果它不存在我想创建但我收到错误mkdir: cannot create directory'./' File exists
我的代码说该文件存在,即使它不存在。我做错了什么?
echo "Enter directory name"
read dirname
if [[ ! -d "$dirname" ]]
then
if [ -L $dirname]
then
echo "File doesn't exist. Creating now"
mkdir ./$dirname
echo "File created"
else
echo "File exists"
fi
fi
【问题讨论】:
为什么是mkdir ./$dirname
而不仅仅是mkdir "$dirname"
?
当我忽略 ./ 时,它说无法创建 - 没有这样的文件或目录
尝试引用,也许你有一些空格,它试图做mkdir ./ your_dir
而不是mkdir ./your_dir
。所以你应该单独使用mkdir "$dirname"
。
【参考方案1】:
试试这个代码:
echo "Enter directory name"
read dirname
if [ ! -d "$dirname" ]
then
echo "File doesn't exist. Creating now"
mkdir ./$dirname
echo "File created"
else
echo "File exists"
fi
输出日志:
Chitta:~/cpp/shell$ ls
dir.sh
Chitta:~/cpp/shell$ sh dir.sh
Enter directory name
New1
File doesn't exist. Creating now
File created
chitta:~/cpp/shell$ ls
New1 dir.sh
Chitta:~/cpp/shell$ sh dir.sh
Enter directory name
New1
File exists
Chitta:~/cpp/shell$ sh dir.sh
Enter directory name
New2
File doesn't exist. Creating now
File created
Chitta:~/cpp/shell$ ls
New1 New2 dir.sh
【讨论】:
【参考方案2】:试试这个:ls yourdir 2>/dev/null||mkdir yourdir
,它小巧简洁,可以完成您的任务。
【讨论】:
请添加更多详细信息,为什么这种方法更好。目前这可能是一条评论。 这里的想法是检查您是否能够ls
目录。如果目录不存在,ls
命令将返回非零退出代码,因此将调用||
子句右侧的命令。如果目录已经存在,ls
命令将返回 0
- true - 并且仅评估 ||
的左侧【参考方案3】:
if [ -L $dirname]
查看这一行产生的错误消息:“[: missing `]'”或类似的(取决于您使用的shell)。您需要在括号内留一个空格。除非您使用双括号,否则您还需要在变量扩展周围加上双引号;你可以learn the rules,或者使用一个简单的规则:始终在变量替换和命令替换周围使用双引号 — "$foo"
、"$(foo)"
。
if [ -L "$dirname" ]
然后有一个逻辑错误:只有当存在不指向目录的符号链接时,您才创建目录。你大概是想在里面有一个否定。
不要忘记该目录可能是在您的脚本运行时创建的,因此您的检查可能会显示该目录不存在,但当您尝试创建该目录时该目录会存在。 Never do “check then do”, always do “do and catch failure”.
如果目录不存在,创建目录的正确方法是
mkdir -p -- "$dirname"
(如果$dirname
包含空格或通配符,则双引号,如果以-
开头,则--
。)
【讨论】:
【参考方案4】:read -p "Enter Directory Name: " dirname
if [[ ! -d "$dirname" ]]
then
if [[ ! -L $dirname ]]
then
echo "Directory doesn't exist. Creating now"
mkdir $dirname
echo "Directory created"
else
echo "Directory exists"
fi
fi
【讨论】:
以上是关于Shell 脚本 - 如果目录不存在则创建目录的主要内容,如果未能解决你的问题,请参考以下文章