代码之家  ›  专栏  ›  技术社区  ›  cb0

如何删除以双连字符开头的文件?

  •  66
  • cb0  · 技术社区  · 17 年前

    我的Unix机器上有一些以

     --
    

    例如 --testings.html

    如果我尝试删除它,会出现以下错误:

    cb0$ rm --testings.html
    rm: illegal option -- -
    usage: rm [-f | -i] [-dPRrvW] file ...
           unlink file
    

    我试过了

    rm "--testings.html" || rm '--testings.html' 
    

    但什么都不管用。

    如何删除终端上的此类文件?

    7 回复  |  直到 17 年前
        1
  •  148
  •   likeitlikeit Srivathsa Harish Venkataramana    13 年前
    rm -- --testings.html
    

    这个 -- 选项告诉rm将所有其他参数视为文件名,而不是选项,即使它们以 - .

    -- 终止选项处理,之后的任何内容都是常规参数。

    http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt

        2
  •  56
  •   lhunath    17 年前
    rm -- --somefile
    

    虽然这是可行的,但这是一个依靠 rm 使用getopts解析其选项。有一些应用程序自己进行解析,并且也会为此而呕吐(因为它们可能不一定实现“ -- 表示选项结束(逻辑)。

    rm ./--somefile
    

    它总是会起作用的,因为这样你的论点就永远不会以错误开始 - .

    此外,如果您正试图制作真正像样的shell脚本;从技术上讲,你应该 ./ 在所有文件名参数扩展之前,防止脚本因文件名输入问题而中断(或防止脚本被滥用/利用来做不该做的事情:例如, rm rm -rf * 将删除所有内容。传递“”的文件名 -rf “给剧本或其他人 touch ~victim/-rf 通过这种方式,ing可能被用来改变其行为,并带来非常糟糕的后果)。

        3
  •  17
  •   Keith Thompson    13 年前

    任何一个 rm -- --testings.html rm ./--testings.html

        4
  •  7
  •   Juliano    17 年前
    rm -- --testings.html
    
        5
  •  4
  •   yaw yaw    17 年前

    另一种方法是使用find-名称“-*”-删除

    touch -- --file 
    find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete 
    
        6
  •  3
  •   Keith Thompson    13 年前

    对于删除文件名中不可能包含字符的文件的更通用方法,一个选项是使用文件的inode。

    可通过以下途径获得: ls -i .

    $ ls -lai | grep -i test
    452998712 -rw-r--r--  1 dim   dim      6 2009-05-22 21:50 --testings.html
    

    $ find ./ -inum 452998712 -exec rm \{\} \;
    

    当处理大量具有文件名特性的文件时,此过程非常有用,因为它可以很容易地编写脚本。

        7
  •  1
  •   Keith Thompson    13 年前
    rm ./--testings.html
    

    rm -- --testings.html