Vá para o diretório com nome desconhecido

Vá para o diretório com nome desconhecido

Ao descompactar um tarball, encontrei um diretório que lsinforma como "??????????????? ?????". Presumivelmente, o nome não está em Unicode? De qualquer forma, não consigo descobrir uma maneira de acessar a pasta. Eu tentei cd $(find -inum inode_number), mas isso me dá

"bash: cd: ./??????????: No such file or directory".

Existe outra maneira de acessar uma pasta diretamente pelo seu número de inode?

Responder1

Uma abordagem geral para poder operar em qualquer diretório (ou arquivo) é usar seu número de inode.

Primeiro, use ls para obter o inode da pasta em questão:

ls -lia
  • -lpara listagem longa (opcional)
  • -ipara obter valores de inode
  • -apara visualizar todos os arquivos, até mesmo arquivos ocultos (opcional)

Na listagem você verá um número longo na primeira coluna, mais ou menos assim:

2104697 drwx------ 2 user group 4096 date time WEIRD_DIRNAME

Agora você pode mudar para esse diretório usando:

cd "$(find -inum ######)"

... mas substituindo ###### pelo número longo que você obteve na listagem do diretório.

É claro que o comando não precisa ser cd. Poderia ser rm, cp, mv,etc....

Responder2

Como os caracteres são provavelmente caracteres internacionais, eles provavelmente aparecem como códigos de controle em seu conjunto de caracteres en_US, e é por isso que ls os mostra como pontos de interrogação.

Isso pode ser devido à escolha da sua distribuição de usar o alias ls por padrão no perfil global. Por exemplo:

alias ls='ls -q'

Você pode ver se sua distribuição fez isso digitando em seu shell:

alias ls

Que imprimirá algo como o seguinte:

$ alias ls
alias ls='ls --color=auto'

A página com link abaixo sugere que se você fizer "ls -b", verá os códigos de controle octais para saber pelo menos quais caracteres estão em uso.

http://www.arsc.edu/arsc/support/howtos/nonprintingchars/

Supondo que isso não funcione, você tem outra opção também mencionada mais abaixo:

Uma ferramenta que eu desconhecia até agora chamada OctalDump (no Debian -- /usr/bin/od)

$ ls | od -b

Mostrará a forma octal dos códigos de controle.

$ ls | od -c

Mostrará os caracteres, incluindo qualquer espaço em branco adicional oculto que possa estar no final (observe os espaços extras no final do exemplo)

Depois de saber quais caracteres de controle estão em jogo e se há espaços em branco ocultos adicionais, você poderá encontrar uma maneira de fazer o cd para o diretório escapando dos caracteres de controle. Caso contrário, você terá algumas opções para renomear o diretório.

A página acima também, convenientemente, possui um método rápido e sujo para remover os caracteres de controle por meio do comando mv, que eu acho que funcionará, desde que você escape do espaço, mas NÃO escape dos pontos de interrogação (tornando-os assim um único caractere curingas), e desde que não exista mais nada no diretório onde está esse diretório não autorizado. A razão para esses requisitos explícitos é porque você está usando apenas caracteres curinga e o espaço único e, portanto, não deseja que o curinga corresponda inadvertidamente a qualquer outro arquivo ou diretório.

Se o método acima não funcionar, você quase certamente poderá usar o método find mencionado por outras respostas, de uma maneira diferente. Em vez de tentar fazer o cd para o diretório usando o número do inode, que é o que você disse que tentou, você pode renomeá-lo usando o número do inode. Apenas certifique-se de copiar todo o conjunto de3linhas para aquele comando da página acima (substitua a parte "nome desejado" pelo nome real para o qual você deseja renomeá-lo).

Depois que o diretório for renomeado, você poderá acessá-lo. Só espero que ele também não contenha arquivos com códigos de controle nos nomes, ou você terá que enxaguar e repetir para cada arquivo (e/ou subdiretório) no diretório que acabou de renomear, ponto em que um loop for seria provavelmente seria aconselhável nomear cada arquivo como um número, incrementando de 1. :-)

Responder3

"?" tem um significado especial no shell, significa "qualquer caractere, incluindo nenhum". Portanto, se o seu arquivo realmente tiver o nome "??????????????? ???????" você provavelmente terá que escapar do "?" (e espaços também) para que você possa tentar algo como cd \?\?\?\?\?\?\ \?\?\?\? (se você ainda não tentou)

Isso pressupõe que alguém intencionalmente deu ao arquivo esse nome complicado, em vez de uma codificação ilegível/corrompida/ilegal.

Responder4

Uma maneira fácil de ver o que há lá é fazer FTP para a máquina com o FileZilla. Então você pode usar o FileZilla para renomear o diretório.

informação relacionada