zoukankan      html  css  js  c++  java
  • 删除文件名含有特殊字符的文件时的意外发现

    首先介绍一下删除文件名含有特殊字符的文件的方法:

    Linux 系统下的文件名长度最多可到256个字符。通常情况下,文件名的字符包括:字母、数字、“.”(点)、“_”(下划线)和“-”(连字符)。Linux 允许在文件名中使用除上述符号之外的其它符号, 但并不建议用户这样做。 有些转意字符 (即该字符被系统借用,表示某种特殊含义) 在 Linux 的 命令解释器(shell)中有特殊的含义。这样的转意字符有:“?”(问号),“*”(星号), “ ”(空格), “$”(货币符), “&”, 扩号等等。在文件名中应尽量避免使用这些字符。文件名中可以有“ ”(空格),但建议用户用“_”(下划线)来替代。“/” 既可代表目录树的根也可作为路径名中的分隔符(类似DOS下的“”),因此“/“不能出现在文件名中。   和 DOS 一样,“.” 和 “..”分别用来表示“当前目录”和“父目录”, 因此它们也不能作为文件名。

    1. 文件名含有特殊字符,直接使用 rm 可能删除不了,可以使用如下方法:
    1) 使用 ls -i 查处该文件的 inode 号,假设为654321
    2) 使用find命令删除    

      find ./ -inum 654321 -ok rm '{}' ;

    2. 如果文件名是以 - 连字符开头的,可以使用如下方法来删除,如删除 "-filename" 文件:

      rm -- -filename

      rm ./-filename

    我遇到的问题:

    aria2下载目录中发现如下异常文件

    /opt/share/data# ll
    drwxrwxrwx    2 root     root          4096 Mar 23 08:09 aria2/
    drwxrwxrwx    2 root     root          4096 Mar 23 14:18 /
    -rw-rw-rw-    1 root     root           234 Mar 23 14:41

    一个命名为“/”,一个命名为空或者空格

    这个不敢通过一般语法和上述方法直接尝试删除,只能首先尝试使用cp进行测试,未果。

    当测试到ls -i * 的时候。忽然发现如下内容:

    飞鸟娱乐(bbs.wofei.net).超人归来.720P.中英字幕:
      66619 -rw-rw-rw-    1 root     root             0 Mar 23 14:18 bbs.wofei.net@
      66627 -rw-rw-rw-    1 root     root             0 Mar 23 14:18

    原来这些异常符号是中文出现了乱码造成的。

    修改系统环境变量支持中文后问题解决。

    本文系作者原创,转载请注明出处。如您阅读的是转载,请最好再看下原文,原文随时会更新和勘误的。

    @Gordon_chang
    1997年毕业于北京联合大学,先后在中国万网,新媒传信,亚信等公司工作,现在在一家创业型公司担任云计算与大数据运维方面的 PM & Engineer。 专注于以下四个领域: 分布式存储 分布式数据库 云计算 大数据 重点通过技术架构与性能优化(底层)实现基于私有云的大数据平台能力

  • 相关阅读:
    Linux上Nginx部署配置--二级域名配置
    Android-Gallery GridView ImageSwitcher 使用
    Android:控件布局(相对布局)RelativeLayout(转)
    Win10 安装msi 提示2502、2503的错误代码 -- 命令提示符(管理员) -- msiexec /package
    storm 入门原理介绍_AboutYUN
    storm入门教程 第一章 前言
    Hbase存储详解
    浅谈设计模式
    Hadoop分布式文件系统--HDFS结构分析
    YARN源码分析(一)-----ApplicationMaster
  • 原文地址:https://www.cnblogs.com/gordonchang/p/6681536.html
Copyright © 2011-2022 走看看