通过终端访问无名文件夹

通过终端访问无名文件夹

我有一个 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  
    

相关内容