创建本地或FTP目录前如何检查目录是否存在以避免重复错误?
当然有办法啦!不管是本地目录还是FTP目录,我们都能在创建前先确认它的存在状态,完美避开“folder-already-exists”的报错。下面分两种场景给你详细拆解具体实现:
一、检查本地目录是否存在
不同的编程语言/脚本工具都有成熟的检查方法,这里给你几个常用的示例:
Python 实现
推荐用pathlib(Python3.4+),语法更简洁直观,还能区分目录和同名文件:
from pathlib import Path target_dir = Path("/path/to/your/local/dir") # 先判断是否是目录(避免和同名文件混淆) if not target_dir.is_dir(): # parents=True 会自动创建不存在的父目录,exist_ok=False 表示存在就报错 target_dir.mkdir(parents=True, exist_ok=False) print(f"成功创建目录: {target_dir}") else: print(f"目录 {target_dir} 已存在,无需重复创建")
如果你习惯用传统的os模块,也可以这样写:
import os target_dir = "/path/to/your/local/dir" if not os.path.isdir(target_dir): os.makedirs(target_dir, exist_ok=False) print(f"目录创建成功") else: print(f"目录已存在")
Bash 脚本实现
用-d选项可以直接判断路径是否为目录:
target_dir="/path/to/your/local/dir" if [ ! -d "$target_dir" ]; then # -p 参数会自动创建缺失的父目录 mkdir -p "$target_dir" echo "目录创建成功" else echo "目录已存在" fi
Windows 批处理实现
需要加上\来确保判断的是目录(避免和同名文件冲突):
set "target_dir=C:\path\to\your\local\dir" if not exist "%target_dir%\" ( mkdir "%target_dir%" echo 目录创建成功 ) else ( echo 目录已存在 )
二、检查FTP目录是否存在
FTP目录的检查逻辑和本地不同,通常需要通过FTP协议的命令来验证,比如尝试切换到目标目录(如果成功则表示存在)。
Python ftplib 实现
from ftplib import FTP # 连接FTP服务器 ftp = FTP("ftp.yourserver.com") ftp.login("your_username", "your_password") target_dir = "/remote/path/to/ftp/dir" try: # 尝试切换到目标目录,成功则说明目录存在 ftp.cwd(target_dir) print(f"FTP目录 {target_dir} 已存在") except ftplib.error_perm as e: # 大多数FTP服务器会返回550错误码表示目录不存在 if "550" in str(e): ftp.mkd(target_dir) print(f"成功创建FTP目录: {target_dir}") else: # 处理其他权限或服务器错误 print(f"操作出错: {e}") # 关闭连接 ftp.quit()
lftp 命令行实现
如果用命令行工具,可以用lftp的条件判断:
#!/bin/bash FTP_SERVER="ftp.yourserver.com" FTP_USER="your_username" FTP_PASS="your_password" TARGET_DIR="/remote/path/to/ftp/dir" lftp << EOF open $FTP_SERVER user $FTP_USER $FTP_PASS if ! [ -d $TARGET_DIR ]; then mkdir $TARGET_DIR echo "FTP目录创建成功" else echo "FTP目录已存在" fi quit EOF
小提示
其实很多工具本身支持“存在则跳过”的参数,比如Python的os.makedirs(exist_ok=True)、Bash的mkdir -p,调用这些命令时即使目录存在也不会报错。但如果你需要明确的日志输出或后续逻辑分支,提前做检查会更灵活。
内容的提问来源于stack exchange,提问作者Muthukumar




