你好,游客 登录 注册 搜索
背景:
阅读新闻

Linux 下如何处理包含空格和特殊字符的文件名

[日期:2015-07-08] 来源:Linux中国  作者:Linux [字体: ]

我们经常会看到文件名和文件夹名。大多数时候文件/文件夹的名字和内容相关并以数字和字母开头。字母加数字的文件名最常见,应用也很广泛,但总会需要处理一些包含特殊字符的文件名/文件夹名。

注意:我们可能有各种类型的文件,但是为了简单以及方便实现,在本文中我们只用文本文件(.txt)做演示。

最常见的文件名例子:

  1. abc.txt
  2. avi.txt
  3. debian.txt
  4. ...

数字文件名例子:

  1. 121.txt
  2. 3221.txt
  3. 674659.txt
  4. ...

字母数字文件名例子:

  1. eg84235.txt
  2. 3kf43nl2.txt
  3. 2323ddw.txt
  4. ...

包含特殊字符的文件名的例子,并不常见:

  1. #232.txt
  2. #bkf.txt
  3. #bjsd3469.txt
  4. #121nkfd.txt
  5. -2232.txt
  6. -fbjdew.txt
  7. -gi32kj.txt
  8. --321.txt
  9. --bk34.txt
  10. ...

一个显而易见的问题是 - 在这个星球上有谁会创建和处理包含井号(#),分号(;),破折号(-)或其他特殊字符的文件/文件夹啊。

我和你想的一样,这种文件名确实不常见,不过在你必须得处理这种文件名的时候你的 shell 也不应该出错或罢工。而且技术上来说,Linux 下的一切比如文件夹、驱动器或其他所有的都被当作文件处理。

处理名字包含破折号(-)的文件

创建以破折号(-)开头的文件,比如 -abx.txt。

  1. $ touch -abc.txt

测试输出

  1. touch: invalid option --'b'
  2. Try'touch --help'for more information.

出现上面错误的原因是,shell 把破折号(-)之后的内容认作参数了,而很明显没有这样的参数,所以报错。

要解决这个问题,我们得告诉 Bash shell(是的,这里以及本文后面的大多数例子都是基于 BASH 环境)不要将特殊字符(这里是破折号)后的字符解释为参数。

有两种方法解决这个错误:

  1. $ touch ---abc.txt [方法#1]
  2. $ touch ./-abc.txt [方法#2]

你可以通过运行命令 ls 或 ls -l 列出详细信息来检查通过上面两种方式创建的文件。

  1. $ ls -l
  2. total 0
  3. -rw-r--r--1 avi avi 0Jun811:05-abc.txt

要编辑上述文件可以这样:

  1. $ nano ---abc.txt
  2. 或者
  3. $ nano ./-abc.txt

注意:你可以将 nano 替换为任何其他你喜欢的编辑器比如说 vim:

  1. $ vim ---abc.txt
  2. 或者
  3. $ vim ./-abc.txt

如果只是简单地移动文件可以这样:

  1. $ mv ---abc.txt -a.txt
  2. 或者
  3. $ mv ---a.txt -abc.txt

删除这种文件,可以这样:

  1. $ rm ---abc.txt
  2. 或者
  3. $ rm ./-abc.txt

如果一个目录下有大量这种名字包含破折号的文件,要一次全部删除的话,可以这样:

  1. $ rm ./-*

重要:

  1. 上面讨论的规则可以同样应用于名字中包含任意数量以及任意位置的连接符号的文件。就是说,-a-b-c.txt,ab-c.txt,abc-.txt,等等。

  2. 上面讨论的规则可以同样应用于名字中包含任意数量以及任意位置连接符号的文件夹,除了一种情况,在删除一个文件夹的时候你得这样使用rm -rf

    $ rm -rf -- -abc 或者 $ rm -rf ./-abc

 

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2015-07/119589p2.htm

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款