我有一个 U 盘,我把它插到印刷店里进行打印。它第一次被 Windows 恶意软件“Gamarue”感染时,我用 Ubuntu 复制了文件并格式化了它,没有造成任何损害。我去了一家完全不同的印刷店,它又被同样的恶意软件感染了。 :(
无论如何,有趣的问题是恶意软件将您的内容隐藏在一个“无名”文件夹中,并诱使毫无戒心的用户双击一个.lnk
文件,我猜想这会让恶意软件复制到您的计算机上。我在 Windows 中看不到这个无名文件夹。
在使用 Ubuntu 中的文件查看器时,我可以看到有一个没有名称的文件夹,里面包含我的所有文件。现在只是为了好玩,我决定通过终端访问此文件夹。我需要做的就是cd
进入/media
,查看文件夹并复制出文件夹(如果我想的话),对吗?嗯,不...
$ ls -l
total 20
drwx------ 1 seelan seelan 4096 Sep 27 10:11 System Volume Information
-rw------- 2 seelan seelan 817 Sep 27 10:11 Theia (30GB).lnk
drwx------ 1 seelan seelan 12288 Sep 27 10:11
哇,一个无名文件夹/目录,我无法通过终端访问。我该如何访问这个文件夹?有什么想法吗?
编辑:对其进行进一步研究后,我们发现非打印字符是八进制字符 302 240。这是通过“ls -l | od -c”完成的,显示了占据空间的八进制字符。链接指出“字符对 \302\240 是 UTF-8 编码中的“NO-BREAK SPACE”。现在唯一的问题是您无法通过终端重命名文件,并且在复制文件时无法输入八进制字符,或者您可以吗?
答案编辑:考虑到它是一个非打印字符,我寻找一种方法来更改终端的编码,希望我能找到一种方法来查看文件夹的名称。出于某种原因,在尝试各种教程时,我尝试使用变量替换进入文件夹。
cd $'\302\240'
进一步了解此事网页。我发现这会将单个/多个转义八进制字符扩展为其相关的 ascii/unicode 字符。使用相同的概念,您可以根据需要创建和删除目录。
答案1
您不能拥有一个名称为空的文件。但是,名称可能是您看不到的东西。例如空格、不间断空格、制表符、水平制表符,甚至是不可打印的字符,例如消息结尾字符或转义字符。
为了说明这一点,我刚刚创建了一个以空白为名称的文件夹,并创建了另一个以非制动空格为名称的文件夹。
$ ls -l
total 8
drwxrwxr-x 2 christoph christoph 4096 Sep 30 22:02
drwxrwxr-x 2 christoph christoph 4096 Sep 30 22:02
正如您所见,没有明显的方法可以看出哪个是哪个(虽然确实显示了不间断空格(在您的浏览器中:只需复制其中一行,按下ctrl + F
搜索它,只会显示 1 个结果)但ls -l
不显示所有字符,因此可以创建实际上具有相同输出行的不同文件夹ls -l
)。
如果您使用的是 Ubuntu 15.04 以外的任何版本,请首先执行此命令:
sudo apt-get install nautilus-open-terminal
这将在 Nautilus 的上下文菜单中显示该条目Open in Terminal
。如果没有,则必须重新启动 Nautilus,因此只需注销并重新登录即可。Ubuntu 15.04 已附带此条目,因此您无需安装,nautilus-open-terminal
否则您将获得两次该条目。
然后您可以使用打开的终端窗口在此位置执行任何您想做的事情。
编辑:我假设您想在终端中打开该位置。如果您想浏览它并且只有终端可用,则可以使用 Ranger 等终端文件浏览器。这里是一个向您展示如何安装和使用它的页面。
答案2
简单的方法是直接复制所有文件而不进入文件夹:
find /media -mindepth 2 -not -path '/media/System*' -exec cp -rt /new/dir {} +
让我们详细分析一下:
find /media
:在目录中搜索/media
-mindepth 2
:仅查找 子目录中的文件或目录/media
。这将确保您跳过/media
其中的内容。-not -path '/media/System*'
:排除路径匹配的任何文件或目录/media/System*
。这将find
忽略/media/System Volume Information
目录中的所有内容。-exec cp -rt /new/dir {}
:将找到的任何内容复制到/new/dir
。
就这样,你的文件已经被复制了,你不需要cd
输入奇怪的名字。
只是为了好玩,为了真正cd
进入这个,你可以尝试几件事:
使用
-F
选项ls
来注释列出的项目的类型。这将/
在每个目录名称后添加:$ ls -lF media/ total 8 drwxr-xr-x 3 root root 4096 Oct 1 02:09 / drwxr-xr-x 2 root root 4096 Oct 1 02:09 System Volume Information/
现在,复制你看不到的字符,确保在时间后面留一个空格,其余的将是你的目录名称。然后,只需将其粘贴到终端的引号内:
cd /media/" "/ ^----- this is the pasted character.
假设目录的名称是一个空格,您可以执行以下操作:
cd /media/" "
如果名称是另一个空格字符,您可以尝试匹配它并按
cd
以下方式进行:for d in media/*; do [[ "$d" =~ /[[:blank:]] ]] && cd "$d"; done