35个答案
如果[-d“$DIRECTORY”]; 然后 echo“$DIRECTORY确实存在。” fi(菲涅耳)
如果[!-d“$DIRECTORY”]; 然后 echo“$DIRECTORY不存在。” fi(菲涅耳)
ln-s“$ACTUAL_DIR”“$SYMLINK” 如果[-d“$SYMLINK”]; 然后 rmdir“$SYMLINK” fi(菲涅耳)
rmdir:未能删除“symlink”:不是目录
如果[-d“$LINK_OR_DIR”]; 然后 如果[-L“$LINK_OR_DIR”]; 然后 #这是一个符号链接! #此处显示符号链接特定命令。 rm“$LINK_OR_DIR” 其他的 #这是一个目录! #此处显示目录命令。 rmdir“$LINK_OR_DIR” fi(菲涅耳) fi(菲涅耳)
-
43 -
4 -
98 要记住一件事: [!-d“$DIRECTORY”] 如果 $目录 不存在,或者如果 做 存在但不是目录。 考虑一下这样的事情 如果[!-d“$DIRECTORY”]; 然后是mkdir“$DIRECTORY”; fi(菲涅耳) ; 如果 “$DIRECTORY”($目录) 是一个文件。 (当然你应该检查 mkdir公司 无论如何都成功了; 它失败的原因有很多。) – 基思·汤普森 评论 2011年8月9日23:46 -
10 -
20 而不是同时测试两个目录( -d日 )和符号链接( -L(左) ),只需在变量后面加一个斜杠就可以了,比如 如果[-d“${THING:+$THING/}”] 。目录不会介意额外的斜杠。 文件的评估结果为false。 空将保持空,所以是假的。 符号链接将解析为其目标。 当然,这取决于你的目标。 如果你想 去 好了,这很好。 如果你想 删除它 ,则此答案中的代码更好。 – 戈蒂 评论 2017年1月17日9:21
如果[-d“$DIRECTORY”]; 然后 #如果$DIRECTORY存在,即使它包含空格,也将在此处输入 fi(菲涅耳)
-
22 -
6 “始终在bash脚本中用双引号将变量括起来……”对于bash,在使用[[…]]时没有技术上的必要; 看见 tldp.org/LDP/abs/html/testconstructs.html#DBLBRACKETS (注意:没有分词):“[[和]]之间没有文件名扩展或分词,但有参数扩展和命令替换。” – 迈克尔 评论 2014年9月12日1:31 -
4 Unix/Linux上的目录不应该有任何空格,随后脚本也不应该适应它。Windows支持它已经够糟糕了,Windows脚本也会受到影响,但请不要引入不必要的要求。 – 电视广播公司 评论 2014年12月24日13:57 -
32 @tvCa我发现,用户通常更喜欢在目录名中获得更大的灵活性,而不是被迫让开发人员更容易操作。 (事实上,在处理长文件名时,我发现没有空格的文件名是一件痛苦的事,因为这会扼杀文字包装,尽管我自己过去也曾因脚本和程序中没有考虑到带有空格的路径而感到痛苦。) – 刺拳 评论 2015年8月12日15:52 -
8
ln-s tmp/t美元 $if[-d t]; 然后是rmdir t; fi(菲涅耳) rmdir:目录“t”:路径组件不是目录
如果[-d t]; 然后 如果[-L t]; 然后 rm吨 其他 rmdir t(rmdir目录) fi(菲涅耳) fi(菲涅耳)
如果[[-d“${DIRECTORY}”&&!-L“$}目录}”]]; 然后 echo“这是一个bona-fide目录” fi(菲涅耳)
-
-
19 @乡村白痴和@Hedgehog,你在用bash shell吗? 双括号不是普遍支持的。 以下是关于这一点的SO答案: stackoverflow.com/questions/669452/… – 育空人 评论 2011年7月2日14:54 -
9 -
9 -
5
#如果$DIR是一个目录,则打印yes [-d“$DIR”]&&echo“是”
-
11 -
9 -
8 -
三 -
@杜尔门那不正确。 下的行为完全相同 集合-e 。除非 回声 失败,脚本将退出。 [-d“$DIR”] 单独(否 &&命令。。。 )将导致脚本退出 集合-e ,如果测试失败(即目录不存在,或 $DIR(美元) 存在但不是目录)。 – 丹 评论 2022年7月18日10:40
测试目录或文件是否存在的简单脚本: if[-d/home/ram/dir]#对于文件“if[-f/home/rama/file]” 然后 echo“目录存在” 其他的 echo“目录不存在” fi(菲涅耳) 检查目录是否存在的简单脚本: mkdir tempdir#如果要检查文件,请使用touch而不是mkdir ret=美元? 如果[“$ret”==“0”] 然后 echo“目录存在” 其他的 echo“目录不存在” fi(菲涅耳) 上述脚本将检查目录是否存在 $? 如果最后一个命令成功,则返回“0”,否则为非零值。 假设 临时目录 已存在。 然后 mkdir临时目录 将给出如下错误: mkdir:无法创建目录“tempdir”:文件存在
-
8 -
2 -
if[-d目录/目录路径]; 然后 #要做的事情 else#如果需要#另外:elif[new condition] #要做的事情 fi(菲涅耳)
if[!-d目录/目录路径]; 然后 #当没有现有目录时要做的事情
-e: 任何类型的档案 -f: 文件 -h: 符号链接 -r: 可读文件 -w: 可写文件 -x: 可执行文件 -s: 文件大小大于零
-d文件 如果文件存在并且是目录,则为True。
test-d“/etc”&&echo存在||echo不存在
[ -这是
测试 内置,但最后一个参数必须是文本
] ,以匹配开口
[ .
帮助[ 帮助测试 人体试验 或 人[
(cd$dir)|| return#这是一个目录吗, #我们有通道吗?
可以使用_as_dir(){ (cd${1:需要路径名})|return }
资产_目录_访问(){ (cd${1:需要路径名})||退出 }
${参数:?字}
如果
参数 设置为非空,然后替换其值; 否则,打印
单词 并退出shell(如果不是交互式的)。 如果
单词 则打印标准消息。
如果结肠
: 从上述表达式中省略,则 shell只检查是否设置了参数。
-
这不仅仅是检查存在性:这是在用户级别检查可访问性。 SO问题代表 存在 只有。 所以正确的答案是 测试-d 正如@Grundlefleck解释的那样。 评论 2013年2月9日20:16 -
8 -
更多功能使用 找到
检查子目录中是否存在文件夹: find=`find-type d-name“myDirectory”` 如果[-n“$found”] 然后 #变量“found”包含“myDirectory”所在的完整路径。 #如果有多个名为“myDirectory”的文件夹,它可能包含多行。 fi(菲涅耳) 根据当前目录中的模式检查是否存在一个或多个文件夹: find=`find-maxdepth 1-type d-name“my*”` 如果[-n“$found”] 然后 #变量“found”包含找到文件夹“my*”的完整路径。 fi(菲涅耳) 两种组合。 在以下示例中,它检查当前目录中是否存在文件夹: find=`find-maxdepth 1-type d-name“myDirectory”` 如果[-n“$found”] 然后 #变量'found'不为空=>“myDirectory”`存在。 fi(菲涅耳)
DIR_PATH=`readlink-f“${the_stuff_you_test}”`#删除符号链接并获取abs路径 如果[[-d“${DIR_PATH}”]]; 然后#现在你正在测试 echo“这是一个目录”; fi(菲涅耳)
如果是pushd/path/you/want/to/enter; 然后 #要在此目录中运行的命令 邻苯二胺 fi(菲涅耳)
如果[-d/path/you/want/to/enter]; 然后 pushd/path/you/want/to/enter #要在此目录中运行的命令 邻苯二胺 fi(菲涅耳)
示例
$is_dir~ 对 $is目录/tmp 对 $is_dir~/bin 对 $mkdir“/tmp/test我” $is_dir“/tmp/test我” 对 $is_dir/asdf/asdf 不 #在另一个脚本中调用它的示例 DIR=~/mydata 如果[$(is_dir$dir)==“NO”] 然后 echo“文件夹不存在:$DIR”; 出口; fi(菲涅耳)
是(_D)
函数show_help() { IT=$(CAT<<EOF 用法:DIR 输出:是或否,取决于目录是否存在。 ) echo“$IT” 出口 } if[“$1”==“help”] 然后 显示帮助(_H) fi(菲涅耳) 如果[-z“$1”] 然后 显示帮助(_H) fi(菲涅耳) DIR=1美元 如果[-d$DIR]; 然后 echo“是”; 出口; fi(菲涅耳) echo“NO”;
如果[-d“$DIRECTORY”]; 然后 #如果$DIRECTORY存在,将在此处输入 fi(菲涅耳)
如果[-d“$DIRECTORY”]&&[-x“$DIRE”]; 然后 # ... 转到该目录(即使directory是链接) cd$目录 密码 fi(菲涅耳)
如果[-d“$DIRECTORY”]&&[-w“$DIRECTORY”]; 然后 # ... 转到该目录并在其中写入内容(即使directory是一个链接) cd$目录 触摸foobar fi(菲涅耳)
[[$(ls-ld“$ISDIR”|剪切-c1)=='d']]&& echo“是,$ISDIR是一个目录。”|| echo“对不起,$ISDIR不是目录”
[ 克劳迪奥无处可去 ~]$ISDIR=“$HOME/音乐” [ 克劳迪奥无处可去 ~]$ls-ld“$ISDIR” drwxr-xr-x.2克劳迪奥·克劳迪奥4096 Aug 23 00:02/home/claudio/音乐 [ 克劳迪奥无处可去 ~]$[[$(ls-ld“$ISDIR”|剪切-c1)=='d']]&& echo“是的,$ISDIR是一个目录。”|| echo“抱歉,$ISDIR不是目录” 是的,/home/claudio/Music是一个目录。 [ 克劳迪奥无处可去 ~]$touch“空文件.txt” [ 克劳迪奥无处可去 ~]$ISDIR=“$HOME/空文件.txt” [ 克劳迪奥无处可去 ~]$[[$(ls-ld“$ISDIR”|剪切-c1)=='d']]&& echo“是,$ISDIR是一个目录。”|| echo“抱歉,$ISDIR不是目录” 对不起,/home/claudio/empty file.txt不是目录
如果[-d“$LINK_OR_DIR”]; 然后 如果[-L“$LINK_OR_DIR”]; 然后 #这是一个符号链接! #此处显示符号链接特定命令 rm“$LINK_OR_DIR” 其他的 #这是一个目录! #此处显示目录命令 rmdir“$LINK_OR_DIR” fi(菲涅耳) fi(菲涅耳)
dir=“” echo“输入要搜索的目录名:” 读取目录 查找$HOME-名称$dir-类型d
[-d Piyush_Drv1]&&echo“”存在“”||echo”不存在“”
[`find.-type d-name Piyush_Drv1-print|wc-l`-eq 1]&&echo存在||echo“不存在”
[[-d run_dir&&!-L run_dir]]&&echo存在||echo“不存在”
[[`ls-ld SAMPLE_DIR|grep^d|wc-l`-eq 1]]&&echo存在||不存在
-ksh:not:未找到[无此类文件或目录]