在我的主目录中有一个名为〜(波浪号)的文件


46

我只注意到我有一个名为~我的~-directory。

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

任何想法如何,我可以mvrm它?


尝试通过索引节点将其删除。
gronostaj

Answers:


55

对于无法通过常规方式删除的文件,最终的解决方案几乎是:

ls -il 

第一列将显示文件的索引节点号。

find . -inum [inode-number] -exec rm -i {} \;

验证后,这将删除具有指定inode编号的文件。


这工作了。也许rici的解决方案也很好,但是我没有尝试。非常感谢!
scrrr

是的,rici的回答也很好。而且我认为这更好,因为它更简单。
Andrey Regentov 2013年

不错,+ 1。我将您的答案改为-delete而不是-exec,然后意识到您正在使用rm -i这是一个好主意,因此我回退了。抱歉。
terdon 2013年

不用担心 当有人认为我的答案值得他们时,总是很高兴:)
Squeezy 2013年

这个答案对我不起作用。Ubuntu 14.04 LTS
KhoPhi

46

您应该能够将该文件~/~引用为(不带引号),因为波浪号扩展名仅~在单词的开头应用波浪号()。


17
同样,要转到文件夹,并且rm ./~,您
也要

@CarlosCampderrós考虑做出答案。与其他答案相比,我认为它是“最佳”和最直接的解决方案,因为./~从字面上意味着~在当前目录中命名的文件或文件夹”。没有像转义字符或inode引用这样的技巧。
ADTC '18年

@ADTC:为答辩,不需要更改CWD,而使用./~则需要更改。五年后,我的记忆有些模糊,但是我认为这就是为什么我建议~/~而不是更普通的原因./~:这个问题专门针对“ ~在[OP's] 主目录中命名的文件”。不是“在当前目录中”。
rici

@rici这是有道理的,并且在问题的上下文中将是适当的。但是,我确实希望看到普遍的答案,或者先讲普遍的答案,然后再详细讨论问题的具体情况。那就是我的辩护:D
ADTC '18

20

引号(rm '~')或转义(rm \~)。


它始终是其中的一个(也用于$),或添加--以防止将文件名解释为参数:rm -- -i删除名称为-i; 的文件。rm -- *当您要删除当前目录中的所有文件时,它也很有用:不会rm -f *因为这样的文件而被偶然删除。


嗯,没有,这似乎不起作用..我尝试了单引号,转义和反引号..他没有提取文件。说它不存在或将〜解释为主目录
。–

@scrrr你的外壳是什么?
丹尼尔·贝克

重击。但是问题解决了inode的方式。
scrrr

@scrrr很高兴您的问题得到解决,但是现在我想知道为什么bash转义在您的系统上不能像在我的系统上那样起作用。
艾萨克·拉比诺维奇

1
小心。--仅停止将以下参数解释为参数-不会阻止shell执行其扩展(例如*),这就是这里发生的情况。(我知道您建议将其作为其他情况的替代方法,但警告会很好。)
Bob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.