Como remover ou renomear uma pasta com um nome “ruim” no El Capitan?

3

No meu iMac eu tenho uma pasta, à esquerda dos sistemas anteriores, chamada "ZipIt 2.2.2␀". Não consigo excluir ou renomeá-lo, nem excluir os arquivos que ele contém, tanto do Finder quanto do Terminal. Olhando para essa questão e respostas relacionadas Eu entendo que este é um bug do Mac OS 10.11 (e posterior?), ligado à presença de NUL personagem no nome.

Eu não tenho um Mac OS antigo na mão. Tentei renomear a pasta com Onyx e A Better Finder Rename 10 mas sem sucesso. Eu também tentei inicializar a partir do Mac OS Recovery, mas não consegui fazer nada de útil.

Alguma ideia?

EDITAR.

Aqui está a saída que recebo do Terminal ao usar o find:

    % ls -li
    total 0
    1067625 drwxrwxrwx+ 6 root  wheel  204 25 Mag  2011 ZipIt 2.2.2␀

    % sudo find . -inum 1067625 -mount -exec rm -rf {} \;
    rm: ./ZipIt 2.2.2␀/.DS_Store: Invalid argument

[... many similar lines ...]

    rm: ./ZipIt 2.2.2␀: Invalid argument

EDITAR 2.

Pensei em uma possível saída, mas não sei se é viável. Eu poderia criar um novo usuário, transferir a pasta incorreta para sua área de trabalho e excluir o usuário.

Você acha que isso pode ser eficaz? Eu gostaria de tentar, mas temo que isso possa travar todo o sistema.

EDITAR 3

Conforme solicitado por Allan, aqui está o conteúdo detalhado da pasta que não consigo excluir:

% find . -type d -name 'Zip*' -print0 | xargs -0 -J -t ls
./ZipIt 2.2.2␀:
Drop files here to zip (OS_X)   ZipIt.app
Read me.pdf

./ZipIt 2.2.2␀/ZipIt.app:
Contents    ZipIt

./ZipIt 2.2.2␀/ZipIt.app/Contents/Resources/ZipIt Help:
ZipIt Help idx  ZipIt help  faq     images
Aretino
fonte
Você pode hardlink um diretório para o inode, então você pode, pelo menos, excluir os arquivos. O sistema de arquivos do reparo no utilitário de disco corrigirá o nome do diretório?
Thorbjørn Ravn Andersen

Respostas:

0

Tente removê-lo através do inode.

Primeiro, pegue o inode:

$ls -li

275505305 drwxr-xr-x   2 allan  staff    68B Jun 11 10:33 foobar

O inode é a primeira coluna de números. Então, usando esse número, execute o seguinte comando:

$ find . -inum XXXXXXXXX -mount -exec rm -rf {} \; 

Onde XXXXXXXXX é o real inode do arquivo / diretório que você deseja excluir.

Allan
fonte
Tentei isso (com -r apenas) e só tenho uma sequela de "argumento inválido". Também tentei com mv em vez de rm e obtive o mesmo resultado.
Aretino
Por favor, publique a saída do $ls -li e o comando exato que você usou. É difícil ver o que está acontecendo tão longe.
Allan
Eu adicionei isso à minha pergunta.
Aretino
É de propriedade root Prefácio o comando com sudo.
Allan
eu recebo rm: ./ZipIt 2.2.2␀/.DS_Store: Invalid argument e assim por diante. Eu suspeito que não há nada para fazer.
Aretino
0

Usando o bash shell, você pode tentar o recurso de conclusão. Exemplo

Ravens-Claw:tmp garex$ mkdir "this\ is\ a\ bad\ folder\ with\ äü\ encoding"
Ravens-Claw:tmp garex$ ls -ltr | tail -1
drwxr-xr-x  2 garex  wheel   68 13 Jun 19:17 this\ is\ a\ bad\ folder\ with\ äü\ encoding
Ravens-Claw:tmp garex$ rm -rf "this\\ is\\ a\\ bad\\ folder\\ with\\ äü\\ encoding"/

Apenas digite rm -rf "this, aperte a tecla TAB e o bash fará o resto. Não esqueça de fechar o ".

Para arquivos com nomes de arquivos estranhos, você pode tentar:

rm -- "<start typing filename and hit TAB key>"
Garex
fonte
Não funciona: a sequência usual de "Argumento inválido" é exibida. Não é um problema do Terminal, é o sistema operacional se recusando a entender um nome contendo "NUL".
Aretino