我今天在网络服务器上遇到了一个神秘的文件。
[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尝试了各种各样的东西,但它总是认为我指的是目录。我也非常小心,因为这是一个生产服务器。
答案 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 -q
或ls -b
也很有用。