如何删除以双连字符开头的文件?
我的Unix机器上有一些文件
--
例如--testings.html
如果我尝试删除它,我得到以下错误:
cb0$ rm --testings.html rm: illegal option -- - usage: rm [-f | -i] [-dPRrvW] file ... unlink file
我试过了
rm "--testings.html" || rm '--testings.html'
但没有任何工作。
我怎样才能删除terminal上的这些文件?
rm -- --testings.html
--
选项告诉rm将所有更多的参数视为文件名,而不是作为选项,即使它们以-
开头。
这不是rm命令的特别之处。 getopt函数实现了它,许多(all?)UNIX样式的命令都以相同的方式处理它: --
终止选项处理,任何后面的东西都是常规参数。
http://www.gnu.org/software/hello/manual/libc/Using-Getopt.html#Using-Getopt
rm -- --somefile
虽然这样做,这是一个解决scheme,依靠rm
使用getoptsparsing其选项。 那里有一些应用程序可以自己parsing并且也会呕吐(因为它们可能不一定实现“ --
意味着选项结束”逻辑)。
正因为如此,你应该通过你的头骨驾驶的解决scheme是这样的:
rm ./--somefile
它会一直工作,因为这样你的论点永远不会以-
开头。
而且,如果你正在尝试制作真正体面的shell脚本, 您应该在技术上将./
放在所有文件名参数扩展的前面,以防止由于时髦的文件名input而导致脚本中断(或防止他们被滥用/利用来做他们不应该做的事情:例如, rm
将删除文件,但跳过目录,而rm -rf *
将删除所有内容,将“ -rf
”的文件名传递给脚本,或者touch ~victim/-rf
可以用来改变它的行为坏的后果)。
rm -- --testings.html
或rm ./--testings.html
。
rm -- --testings.html
另一种方法是使用find … -name“ – *”-delete
touch -- --file find -x . -mindepth 1 -maxdepth 1 -name "--*" -delete
对于更通用的方法来删除文件名中不可能的字符的文件,一个选项是使用文件的inode。
它可以通过ls -i
获得。
例如
$ ls -lai | grep -i test 452998712 -rw-r--r-- 1 dim dim 6 2009-05-22 21:50 --testings.html
并删除它,find的帮助:
$ find ./ -inum 452998712 -exec rm \{\} \;
这个过程在处理大量具有文件名特征的文件时是有益的,因为它可以很容易地编写脚本。
rm ./--testings.html
要么
rm -- --testings.html