我必须从Unix机器上的目录中删除许多名为“test excel-27-03-2016.xls
”的文件。你能建议怎么样?我尝试使用命令
rm -f test excel-27-03-2016.xls
但它没有删除文件。
答案 0 :(得分:1)
所以如果' test excel-27-03-2016.xls
'是一个文件名,您必须在rm
命令中转义空格。
rm test\ excel-27-03-2016.xls
或
rm 'test excel-27-03-2016.xls'
否则rm
会认为'测试'和' excel-27-03-2016.xls'是两个不同的文件。
(你也不应该使用-f
。)
答案 1 :(得分:1)
文件名是否包含空格?看来是这样。
如果是这种情况,rm -f "test excel-27-03-2016.xls"
(注意文件名周围的双引号)应该这样做。
正在运行rm -f test excel-27-03-2016.xls
意味着要删除两个文件,一个名为test
,另一个名为excel-27-03-2016.xls
。
答案 2 :(得分:0)
对于单个文件,如果文件名包含空格,则必须保护这些空格。默认情况下,shell会在空格处分割文件名(通常是参数)。因此,请将名称括在双引号或单引号中:
rm -f "test excel-27-03-2016.xls"
如果你愿意,可以使用反斜杠(但我不喜欢反斜杠;我通常使用引号):
rm -f test\ excel-27-03-2016.xls
当删除操作无效时,-f
的{{1}}选项成为您的敌人;它会抑制rm
否则会给出的错误消息。例如,如果没有rm
,您可能会看到:
-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
$
有两个名字,而不是你想要的名字。
来自评论:
我有20-30个文件;每次都必须提供
rm
并提供"是"删除文件的权限?
学习外卡的时间。首先要学习的内容 - 小心! 不要随意破坏文件。
运行如下命令:
rm 'test excel-27-03-2016.xls"
是否列出了您要删除的文件 - 您要删除的所有文件除了要删除的文件之外什么都没有?如果它不包含任何额外的文件名(并且没有目录名),那么您可以运行:
ls -ld *.xls
如果它不包含您需要删除的所有文件名,但它只包含您需要删除的名称,则运行rm -f *.xls
以减小问题的大小,然后设计替代方案模式删除其他:
rm
如果它包含太多名称,您有几个选项。一种是以交互方式使用ls -ld *.xlsx # Semi-plausible
:
rm
并对应删除的内容回答“是”,对应保留的内容回答“否”。另一种方法是制定一个更精确的通配符,可能是rm -i *.xls
。
当使用通配符时,shell将文件名保存为单个参数,因此生成的名称中包含空格的事实不是问题。请注意,许多shell技术(例如捕获变量中的文件名列表)不会正确保留空间 - 这会引起很多混乱。
并且,删除任何大量文件后,要非常小心。 Unix系统不会阻止你对你的文件造成巨大的破坏它会让你听从你的话 - 如果你说'删除所有内容',它会尝试这样做。
来自另一条评论:
当你在解决你正在做的事情时遇到问题时,不要以root身份运行。以我已获得root权限,因此我将拥有所有权限。
*-27-03-2016.xls
运行意味着任何错误都可能比你自己运行时更具破坏性。
如果您以root身份运行,则root
-f
的{{1}}选项确实不需要(除非有人试图通过为rm
命令创建别名来保护您)。
当您rm
时,系统会按照您的要求执行操作。 root
:删除内核。 root
:是的,先生!马上,先生! system
:删除完整的根文件系统。 root
:是的,先生!马上,先生!
以root身份运行时非常非常小心。以root身份运行时进行实验是一个坏主意。准确了解您打算以root身份执行的操作,获取root权限并执行您计划执行的操作,然后尽快失去root权限非常重要。使用system
(或sudo
)暂时获得root权限。