如何删除名为" .."的文件在Linux系统上

时间:2016-01-06 00:06:33

标签: linux bash shell

我今天在网络服务器上遇到了一个神秘的文件。

[root@hosting wwwbeta]# ls -la "mydir"
total 600
drwxr-xr-x  7 apache apache  4096 Jan  5 15:40 .
drwxr-xr-x 38 apache apache  4096 Jan  5 13:41 ..
-rwxr-xr-x  1 root   root     337 Mar 25  2014 .. 
-rwxr-xr-x  1 root   root    3225 Jun  6  2014 more files

有关如何摆脱此文件的任何想法?我用rm尝试了各种各样的东西,但它总是认为我指的是目录。我也非常小心,因为这是一个生产服务器。

4 个答案:

答案 0 :(得分:3)

我想在..之后有空格意味着文件的创建方式如下:

touch '.. '

您无法使用ls识别空格。

我会使用find删除文件:

find -maxdepth 1 -type f -name '..*' -delete

使用-type f确保您不会尝试删除父文件夹(因为它不是空的,所以无法正常工作)

不过,可能你应该关注安全性,但文件也可能是偶然或错误的脚本创建的。如果文件在删除后应“返回”,那么您应该非常关注。

答案 1 :(得分:3)

使用

查找文件的inode编号
ls -ila

如果注明了inode编号,请使用find

find -inum <inode> -delete

答案 2 :(得分:2)

可以要求shell本身以一种格式为您提供文件名的列表,然后可以使用printf '%q'格式字符串成功键入到将来的shell命令。演示,使用sigil字符显示开始和结束:

printf '<%q>\n' .*

如果您的目录包含名为..的文件(末尾有空格),则会发出如下内容:

<.>
<..>
<..\ >

...并且,如果没有箭头括号进行复制和粘贴,则最后一个条目将引用手头的文件。或者,如果它包含一个标签,那么它可能看起来像:

<.>
<..>
<$'..\t'>

...同样,您仍然可以使用$'..\t'来引用相关文件。

答案 3 :(得分:0)

你可以看到有多少个空格: ls -al | cat -vet

如果文件实际命名为“..”(句点期间),这应该有效: rm "$(echo ..?)"

如果您认为名称中还有其他不可打印的字符,您可能会发现ls -qls -b也很有用。