Linux中创建文件名为特殊字符(#、*、-等)的文件

  • Post author:
  • Post category:linux


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 版权协议,转载请附上原文出处链接和本声明。