Acessando uma pasta sem nome via terminal

3

Eu tenho um thumbdrive que eu uso para ligar em lojas de impressão para obter a minha impressão feita. A primeira vez que foi infectado por um malware do Windows "Gamarue", eu copiei arquivos usando o Ubuntu e o formatou, sem nenhum dano. Eu me dirijo a uma loja de impressão totalmente diferente e ela é infectada novamente com o mesmo malware. : (

De qualquer forma, uma questão interessante é que o malware esconde seu conteúdo em uma pasta "sem nome" e o usuário desavisado o persegue a clicar duas vezes em um arquivo .lnk que, presumo, permite que o malware copie para o seu computador. Não consegui ver esta pasta sem nome no Windows.

Enquanto uso o visualizador de arquivos no Ubuntu, vejo que há uma pasta lá sem nome contendo todos os meus arquivos. Agora só por diversão, decidi acessar esta pasta via terminal. Tudo que eu preciso fazer é cd into /media , ver a pasta e copiar as pastas se eu quiser certo? Bem, não ...

$ 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  

Tadaaaa uma pasta / diretório sem nome que não consigo acessar via terminal. Como eu iria acessar esta pasta? Alguma idéia?

Editar: um pouco mais de pesquisa mostra que o caractere não imprimível é o caractere octal 302 240. Isso foi feito por "ls -l | od -c" mostrando o caractere octal que ocupa o espaço. link afirma que "O par de caracteres \ 302 \ 240 é o" NO-BREAK SPACE "da codificação UTF-8." O único problema agora é que você não pode renomear arquivos via terminal e não pode digitar caracteres octal ao copiar o arquivo ou pode?

Editar resposta: Considerando que era um personagem não imprimível, eu olhei para uma maneira de alterar a codificação do terminal, espero que eu pudesse encontrar uma maneira de ver o nome da pasta. Por algum motivo, durante a tentativa de vários tutoriais, eu tentei cd na pasta usando uma substituição de variável.

cd $'20'

Pesquise mais sobre essa página da Web . Descobri que isso expandirá os caracteres octal de fuga única / múltipla para seu caractere ascii / unicode relevante. Usando o mesmo conceito, você pode criar e remover o diretório, se desejar.

    
por seelani 30.09.2015 / 21:07

2 respostas

2

Você não pode ter um arquivo com um nome vazio. No entanto, o nome pode ser algo que você não pode ver. Como um espaço, um espaço sem quebra, uma guia, uma guia horizontal ou até mesmo um caractere que nem sequer pode ser impresso como um caractere de final de mensagem ou um caractere de escape.

Para mostrar isso, acabei de criar uma pasta com um nome em branco e outro com um espaço sem frenagem como nome.

$ ls -l
total 8
drwxrwxr-x 2 christoph christoph 4096 Sep 30 22:02  
drwxrwxr-x 2 christoph christoph 4096 Sep 30 22:02  

Como você pode ver, não há nenhuma maneira óbvia de ver qual é qual (embora o espaço que não quebra seja realmente exibido (em seu navegador: apenas copie uma das linhas, pressione ctrl + F para procurá-lo, e apenas 1 resultado será mostrado), mas ls -l não exibe todos os caracteres, por isso é possível fazer pastas diferentes com a mesma linha de saída de ls -l ).

Se você estiver usando qualquer versão do Ubuntu, mas 15.04, primeiro execute este comando:

sudo apt-get install nautilus-open-terminal

Isso lhe dará a entrada Open in Terminal no menu de contexto do Nautilus. Se não o Nautilus tiver que ser reiniciado, então simplesmente efetue logout e login novamente. O Ubuntu 15.04 já vem com essa entrada, então você não precisa instalar nautilus-open-terminal ou você terá a entrada duas vezes.

Depois, você pode usar a janela de terminal aberta para fazer o que quiser neste local.

Edit: Eu assumi que você queria abrir o local em um terminal. Se você quiser navegar e só tem um terminal disponível, você pode usar um navegador de arquivos de terminal como o Ranger. Aqui é uma página mostrando como instalá-lo e usá-lo.

    
por UTF-8 30.09.2015 / 21:22
2

A maneira mais fácil é simplesmente copiar todos os seus arquivos sem se mover para a pasta:

find /media -mindepth 2 -not -path '/media/System*' -exec cp -rt /new/dir {} +

Vamos dividir isso:

  • find /media : searc no diretório /media
  • -mindepth 2 : procure apenas por arquivos ou diretórios que estejam em um subdiretório de /media . Isso garantirá que você pule as coisas em /media .
  • -not -path '/media/System*' : exclui quaisquer arquivos ou diretórios cujo caminho corresponda a /media/System* . Isso fará com que find ignore qualquer coisa no diretório /media/System Volume Information .
  • -exec cp -rt /new/dir {} : copie qualquer coisa encontrada para /new/dir .

É isso aí, seus arquivos foram copiados e você não precisa cd no nome estranho.

Apenas por diversão, para realmente cd , você pode tentar algumas coisas:

  • Use a opção -F de ls para anotar o tipo de item listado. Isso adicionará um / após cada nome de diretório:

    $ 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/
    

    Agora, copie os caracteres que você não pode ver, deixando um espaço após o tempo, o resto será o nome do seu diretório. Então, cole isso no terminal, entre aspas:

    cd /media/" "/
               ^----- this is the pasted character.
    
  • Supondo que o nome do diretório seja um espaço, você pode fazer:

    cd /media/" "
    
  • Se o nome for outro (s) caractere (s) de espaço em branco, você poderá tentar combiná-lo e cd ing dessa maneira:

    for d in media/*; do [[ "$d" =~ /[[:blank:]]  ]] && cd "$d"; done  
    
por terdon 01.10.2015 / 01:29