Ubuntu Server 16.4.04中带反斜杠同名文件夹的生成与删除问题
解决带末尾反斜杠的特殊文件夹创建与删除问题
问题根源分析
先帮你理清为什么会出现这个奇怪的文件夹:
- Linux系统和Windows不同,文件名里允许包含反斜杠
\(Windows里它是路径分隔符),所以当你的PHP脚本中$directory变量末尾不小心带了反斜杠时,mkdir()就直接创建了一个名字以\结尾的文件夹。 - 至于
ls命令看不到它,是因为Shell会把反斜杠当成转义字符解析,直接输入ls时,Shell会自动去掉这个反斜杠,自然找不到对应的文件;而dir或者ls -b会显示原始的文件名,所以能看到它的存在。
快速删除这个特殊文件夹
给你几个可靠的删除方法,任选其一即可:
- 用单引号包裹文件夹名(单引号会让Shell不解析里面的特殊字符):
rm -r 'directory\'
注意这里的directory\要和你实际的文件夹名完全一致,包括末尾的反斜杠。
- 用反斜杠转义自身:
rm -r directory\\
这里的两个反斜杠,第一个是转义符,告诉Shell第二个反斜杠是文件名的一部分。
- 用find命令定位并删除:
如果不确定准确文件名,可以先查找确认再删除:
# 先查找目标文件夹 find . -name '*\$' # 找到后执行删除(替换成实际的文件名) find . -name 'directory\' -exec rm -r {} \;
避免再次踩坑的建议
回头检查你的PHP脚本,确保$directory变量末尾没有多余的反斜杠,可以用rtrim()统一处理:
$directory = rtrim($directory, '/\\'); // 去掉末尾的斜杠,兼容Linux和Windows路径格式 if (!file_exists($directory)) { mkdir($directory); }
内容的提问来源于stack exchange,提问作者A. Johnston
相关产品推荐
相关产品推荐

