如何在Docker中检查文件夹是否存在并编写Bash脚本处理结果
检查Docker容器内指定文件夹是否存在的Bash脚本方案
你的示例脚本存在几个需要修正的问题,以下是优化后的实现方案:
问题修正点
- 变量赋值时等号不能有空格(原脚本
toto = ...的写法错误) - 脚本运行时无需交互式终端,应去掉
docker exec的-t参数(-it仅用于交互式场景) - 可以直接利用命令的退出状态码判断,比捕获输出更简洁可靠
方案一:利用命令退出状态码(推荐)
# 检查容器symfony内的imports文件夹是否存在 if docker exec symfony sh -c "test -d imports"; then echo "文件夹存在" else echo "文件夹不存在" fi
说明
test -d命令在目标文件夹存在时返回0(成功状态),否则返回非0。docker exec会继承这个退出码,因此可以直接在if条件中判断。
方案二:通过输出结果判断(修正原脚本写法)
# 捕获命令输出,注意赋值符号无空格,去掉-t参数 toto=$(docker exec symfony sh -c "test -d imports && echo '1'") if [[ "$toto" == '1' ]]; then echo "文件夹存在" else echo "文件夹不存在" fi
说明
- 用
$()捕获命令的标准输出,变量赋值时等号两侧不能有空格 - 仅当
imports文件夹存在时,才会输出1,否则无输出,以此作为判断依据
注意事项
- 确保目标容器
symfony处于运行状态,否则docker exec会执行失败 - 如果是绝对路径的文件夹,需写全路径(如
/var/www/imports),避免相对路径引发的问题 - 仅在需要交互式操作时才添加
-it参数,脚本环境下不建议使用
内容的提问来源于stack exchange,提问作者Camel4488
相关产品推荐
相关产品推荐

