Ubuntu下Python复制挂载的网络共享文件夹文件报错:文件不存在
问题排查与解决办法
1. 网络共享缓存/延迟问题
os.listdir()返回的是挂载点本地缓存的文件列表,可能实际共享端的文件已被移除,或者网络波动导致文件暂时不可访问。给代码加上文件存在检查就能规避这类情况:
import sys import os import shutil SHARED_FOLDER = '/home/john/mnt' TARGET_FOLDER = "/home/john/Desktop/" for img in os.listdir(SHARED_FOLDER): src_path = os.path.join(SHARED_FOLDER, img) print(f"Processing: {src_path}") if not os.path.exists(src_path): print(f"Warning: {src_path} no longer exists") continue if os.path.isdir(src_path): print(f"Warning: {src_path} is a directory, skipping") continue try: shutil.copy(src_path, TARGET_FOLDER) print(f"Successfully copied {img}") except Exception as e: print(f"Failed to copy {img}: {str(e)}")
2. 权限不足(伪装成文件不存在)
Linux下权限不足时,打开文件的错误可能会伪装成"文件不存在"。执行以下命令检查目标文件的权限:
ls -l /home/john/mnt/2023-04-24_14:37:10_68.png
如果当前用户没有读权限,需要调整共享挂载的权限配置,或者联系共享端管理员开放读权限。
3. 符号链接问题
如果共享文件夹中的文件是符号链接,且链接指向的目标在本地无法访问(比如共享端的内部路径),会导致shutil.copy无法读取源文件。可以添加符号链接检查并跳过:
if os.path.islink(src_path): print(f"Skipping symlink: {src_path}") continue
4. 挂载配置问题
检查网络共享的挂载参数,比如是否是只读挂载(ro),或者挂载选项限制了文件访问。执行以下命令查看挂载信息:
mount | grep /home/john/mnt
如果是SMB共享,确保挂载时添加了rw(读写)选项,必要时重新挂载:
sudo umount /home/john/mnt sudo mount -t cifs //server/share /home/john/mnt -o username=youruser,password=yourpass,rw
内容的提问来源于stack exchange,提问作者S Andrew
相关产品推荐
相关产品推荐

