如何删除名为“.”的文件?

How to remove a file named '.'?

好吧,我做了一些非常愚蠢的事情(复制一个文件并将其重命名为“.”),因为我认为它只会将其复制为 .uniprot_sprot.fasta.gz.icloud.

cp /path/.uniprot_sprot.fasta.gz.icloud .

现在我不知道如何将它从当前目录中删除,因为它会删除“.”。本身。

我能做什么? 这是行不通的。它说:没有这样的文件或目录

rm .uniprot_sprot.fasta.gz.icloud

另一方面:

ls -a 

给出这个:

.
..
uniprot_sprot.fasta.gz.icloud

您还没有复制文件并将其重命名为 .(无论如何,如果您 运行 是一个理智的 *nix)。相反,您使用原始文件的 名称 将文件 复制到当前目录 。 (如果将目录传递给 cp 作为目标,文件将被放置 在该目录 中。. 是当前目录,所以这就是全部发生了。)如果你想删除它,你可以 rm uniprot_sprot.fasta.gx.iscloud 或明确地 rm ./uniprot_sprot.fasta.gx.iscloud。您尝试做的是删除名称以 . 开头的文件,这是另一回事。

编辑: 我写这篇文章时并没有意识到,但这实际上只是 . 作为真实的常规硬链接存在。在系统调用级别,您可以创建一个文件,其名称包含除 /\x00(是的,包括 \n)之外的任何内容,前提是您的文件系统允许这样做。但是,链接 ... 已经存在,因此不能用作文件名。 @thatotherguy 为 rmdir 系统调用链接到 the kernel source,表明在现代 Linux 中至少是内核本身最终阻止您删除 ....

请注意,在 bash 中,行首的 . 本身意味着 source

有关文件名问题的详细信息,请参阅 this question on unix.se and its linked dupe