CentOS6.9中用touch命令创建名字为#的文件时报错
[root@sotneC6 tmp]# touch #
touch: missing file operand
Try `touch --help' for more information.
百度了一下,发现原因是shell
把特殊字符#解释为注释符
,所以touch后面因缺少操作数报错。解决方法有两个:一是
将文件名加上单引号
;二是
指明文件的绝对路径或相对路径(不能直接是文件名)
。(参考:
如何在Linux中操作文件名有空格和特殊字符
)
[root@sotneC6 tmp]# touch '#' # 扩单引号的文件名
[root@sotneC6 tmp]# ls
* #
[root@sotneC6 tmp]# touch ./# # 指明相对路径的文件名
[root@sotneC6 tmp]# ls
* #
[root@sotneC6 tmp]# touch "#" # 扩双引号的文件名
[root@sotneC6 tmp]# ls
* #
创建名字为!和@的文件名是可以正常创建的
[root@sotneC6 tmp]# touch ! @
[root@sotneC6 tmp]# ls
! @ #
以其他特殊字符*、?、.、…、/、-为文件名的文件无法正常创建,需按以上方法特殊处理
[root@sotneC6 tmp]# touch '*' "?" ./. '..' '/' '-'
[root@sotneC6 tmp]# ls
! ? @ * #
[root@sotneC6 tmp]# touch ./-
[root@sotneC6 tmp]# ls
- ! ? @ * #
输入命令后发现 . … / 这三个特殊符号不适用以上方法创建,有点麻烦,应该是shell把三个符号分别解释为当前目录、当前目录上一级目录和根目录。查阅资料得知不能创建文件名包含/的文件除非有Unicode支持。名字为/的文件先不管了,找到一种方法可以让文件名包含.和…(
用\让shell忽略下一个字符,得到文件名开头为空格
的文件)
[root@sotneC6 tmp]# touch \ .
[root@sotneC6 tmp]# ls
. - ! ? @ * #
[root@sotneC6 tmp]# touch \ ..
[root@sotneC6 tmp]# ls
. .. - ! ? @ * #
至此,创建了文件名为- ! ? @ * #和名字包含. …的文件
版权声明:本文为weixin_43733092原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。