Windows及Linux文件名特殊字符

勤奋不是嘴上说说而已,而是实际的行动,在勤奋的苦度中持之以恒,永不退却。业精于勤,荒于嬉;行成于思,毁于随。在人生的仕途上,我们毫不迟疑地选择勤奋,她是几乎于世界上一切成就的催产婆。只要我们拥着勤奋去思考,拥着勤奋的手去耕耘,用抱勤奋的心去对待工作,浪迹红尘而坚韧不拔,那么,我们的生命就会绽放火花,让人生的时光更加的闪亮而精彩。

导读:本篇文章讲解 Windows及Linux文件名特殊字符,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

概述

在做Java实现HTML页面截图功能时,Linux系统生成的文件通过MobaXterm这么一款SSH工具下载到本地Windows时,总是报错:
在这里插入图片描述
但是这个文件在Linux服务器里面确实是存在的。仔细对比文件名,才发现文件名里面还有一个|字符,下载到Windows时失败。

失败的原因(直接抛出结论):|字符在Linux系统下是合法的文件名,但是Windows下则不是,故而下载失败。MobaXterm这个工具并未考虑到这个字符兼容的问题,哈哈哈。

Windows

在使用Windows时,经常遇到如下报错:
在这里插入图片描述
文件是存放数据的最根本单位,每个文件都有唯一一个文件名用于标记文件。

内容 说明
/ Linux的路径分隔符,使用后会导致路径错误
\ Windows的路径分隔符,使用后会导致路径错误
: 一些编译语言,如java会用它作用文件间的分隔符
? 在很多控制台命令中,会当成通配符使用
* 在很多控制台命令中,会当成通配符使用
| 一些语言中被当成分隔符使用,如Markdown的制表符
" 大多数语言中会被当成字符串的开始和结束符,必需转义使用
' 一些语言,如Python中,会作为字符串开始和结束符使用
< 在HTML或XML中标签开始的标记
> 在HTML或XML中的标签结束标记
空格在DOS中,会被当成分隔符使用,必需加引号才可正常工作
$ 在很多环境中会被当成变量开始符号,如Shell

推荐使用的安全非字母和数字符号。

内容 说明
_ 下划线任何语言中都可以使用的安全字符。
@ 因邮件地址而出名,可以安全使用(注意不要和自己的邮件地址冲突)
+- 这两个符号虽然也做为运算符,但是作为文件名是没有任何问题的。
. 安全,虽然在 windows 中作为后缀的分隔附,但是不影响正常使用。

代码处理:

public static String replaceSpecialCharacters(String filename) {
	/*
	 * windows下文件名中不能含有:\ / : * ? " < > | 英文的这些字符 ,这里使用"."、"'"进行替换。
	 * \/:?| 用.替换
	 * "<> 用'替换
	 */
	filename = filename.replaceAll("[/\\\\:*?|]", ".");
	filename = filename.replaceAll("[\"<>]", "'");
	return filename;
}

Linux

Linux系统下的特殊字符:-(文件名第一个字母)、#;$!@&()\<>(空格)
处理方法:

  1. 最简单直接的办法,用绝对路径,如:touch ./tmp/Me like yuh.mp3
  2. 使用转移符\cp a\&b.c de.c
  3. 通过双引号"cp "a&b.c" de.c
  4. 特殊地,文件名最前面是-,通过加两个-rm -- -ab.c

参考

Linux-Shell-文件名特殊字符

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142223.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!