如何检查指定路径是否仅存在特定文件夹或同时存在其他文件/文件夹
实现指定路径下的条件执行脚本逻辑
需求场景
指定路径中仅存在目标文件夹时运行scriptA.sh;若目标文件夹与其他文件/文件夹共存时运行scriptB.sh。
解决方案(Bash脚本实现)
以下提供两种可靠的实现方式,优先推荐第二种(避免文件名特殊字符导致的统计错误):
方式一:基于ls统计条目数
#!/bin/bash # 替换为你的目标文件夹路径 TARGET_DIR="/path/to/your/target_folder" BASE_DIR=$(dirname "$TARGET_DIR") # 先验证目标文件夹是否存在 if [ ! -d "$TARGET_DIR" ]; then echo "目标文件夹不存在,终止执行" exit 1 fi # 启用dotglob,让通配符匹配隐藏文件/文件夹(避免漏算) shopt -s dotglob # 统计父目录下的所有条目数量(排除.和..) ITEM_COUNT=$(ls -1A "$BASE_DIR" | wc -l) # 关闭dotglob shopt -u dotglob # 执行对应逻辑 if [ "$ITEM_COUNT" -eq 1 ]; then # 仅存在目标文件夹 ./scriptA.sh elif [ "$ITEM_COUNT" -gt 1 ]; then # 目标文件夹与其他条目共存 ./scriptB.sh fi
方式二:基于数组统计(更可靠)
当文件名包含换行、空格等特殊字符时,ls统计可能出错,这种方式能完美兼容:
#!/bin/bash # 替换为你的目标文件夹路径 TARGET_DIR="/path/to/your/target_folder" BASE_DIR=$(dirname "$TARGET_DIR") # 先验证目标文件夹是否存在 if [ ! -d "$TARGET_DIR" ]; then echo "目标文件夹不存在,终止执行" exit 1 fi # 启用dotglob,包含隐藏文件/文件夹 shopt -s dotglob # 将父目录下的所有条目存入数组 ITEMS=("$BASE_DIR"/*) # 关闭dotglob shopt -u dotglob # 获取数组长度(即条目数量) ITEM_COUNT=${#ITEMS[@]} # 执行对应逻辑 if [ "$ITEM_COUNT" -eq 1 ]; then ./scriptA.sh elif [ "$ITEM_COUNT" -gt 1 ]; then ./scriptB.sh fi
关键说明
BASE_DIR:通过dirname获取目标文件夹所在的父目录,确保统计范围正确dotglob:启用后让通配符匹配隐藏文件/文件夹,避免漏算.开头的条目- 数组统计方式:能正确处理含特殊字符的文件名,是生产环境更推荐的实现方式
内容的提问来源于stack exchange,提问作者Oxycash
相关产品推荐
相关产品推荐

