如何删除名为“.”的文件?
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。
好吧,我做了一些非常愚蠢的事情(复制一个文件并将其重命名为“.”),因为我认为它只会将其复制为 .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。