我必须从Unix机器上的目录中删除许多名为"test excel-27-03-2016.xls
"的文件。你能建议一下怎么做吗?我尝试使用命令
rm -f test excel-27-03-2016.xls
但它并没有删除该文件。
文件名是否包含空格?似乎是这样。如果是这种情况,rm -f "test excel-27-03-2016.xls"
(注意文件名周围的双引号)应该这样做
运行rm -f test excel-27-03-2016.xls
意味着尝试擦除两个文件,一个名为test
,另一个名excel-27-03-2016.xls
。
因此,如果'test excel-27-03-2016.xls
'是一个文件名,则必须转义rm
命令中的空格。
rm test excel-27-03-2016.xls
或
rm 'test excel-27-03-2016.xls'
否则rm
会认为"test"one_answers"excel-27-03-2016.xls"是两个不同的文件。(您也不需要使用-f
。)
对于单个文件,如果文件名包含空格,则必须保护这些空格。默认情况下,shell在空格处拆分文件名(通常为参数)。因此,将名称用双引号或单引号括起来:
rm -f "test excel-27-03-2016.xls"
或者如果你喜欢,可以使用反斜杠(但我不喜欢反斜杠;我通常使用引号):
rm -f test excel-27-03-2016.xls
当删除操作不起作用时,-f
选项到rm
将成为您的敌人;它抑制CCD_ 12否则将给出的错误消息。例如,如果没有-f
,您可能会看到:
$ rm test excel-27-03-2016.xls
rm: test: No such file or directory
rm: excel-27-03-2016.xls: No such file or directory
$
这告诉你rm
有两个名字,而不是你想要的一个。
来自评论:
我有20-30个文件;我每次都必须给
rm 'test excel-27-03-2016.xls"
并提供"是"权限才能删除文件吗?
是时候学习外卡了。首先要学习的是小心不要随意销毁文件。
运行命令,例如:
ls -ld *.xls
它列出了你想要删除的文件吗?所有你想要删除,除了想要删除的那些文件什么都没有?如果它不包含任何额外的文件名(也没有目录名),那么您可以运行:
rm -f *.xls
如果它不包含所有需要删除的文件名,但只包含需要删除的名称,则运行rm
以减小问题的大小,然后设计一种替代模式来删除其他文件名:
ls -ld *.xlsx # Semi-plausible
如果它包含太多的名称,则有几个选项。一种是交互式使用rm
:
rm -i *.xls
对应该删除的回答"是",对应该保留的回答"否"。另一个是计算出一个更精确的通配符,可能是*-27-03-2016.xls
。
当使用通配符时,shell将文件名保留为单个参数,因此生成的名称中有空格这一事实并不成问题。请注意,许多shell技术,例如捕获变量中的文件名列表,并不能正确地保留空格,这会导致很多混乱。
而且,对于任何批量文件删除,都要非常小心。Unix系统不会阻止你对你的文件造成巨大的破坏。它会相信你的话——如果你说"删除所有内容",它会尝试这样做。
来自另一条评论:
我已获得root访问权限,因此我将拥有所有权限。
当你在做什么时遇到问题时,不要以root身份运行。以root
的身份运行意味着,任何错误都有可能比以自己的身份运行更具破坏性。
如果您是以root用户身份运行,那么rm
的-f
选项就不需要了(除非有人试图通过为rm
命令创建别名来保护您)。
当您是root
时,系统会按照您的指示执行。root
:删除内核。system
:是的,先生!马上,先生!root
:删除完整的根文件系统。system
:是的,先生!马上,先生!
以root身份运行时要非常小心。以root身份运行时进行实验是个坏主意。非常重要的是,要确切地知道你作为root用户计划做什么,获得root权限并做你计划做的事情,然后尽快失去root权限。使用sudo
(或su
)暂时获得root权限。