caractere especial no nome do arquivo (\ # 033OA)

10

Eu tenho um pequeno problema com um erro muito teimoso durante um rsync. É causado por um arquivo com um caractere especial em seu nome de arquivo. Houve outros, mas eu poderia resolver isso fazendo alguma conversão na codificação do nome do arquivo. No entanto, este arquivo não consigo encontrar.

Então, aqui está o que o rsync diz:

../.\#033OA.tex.pyD0MB" failed: No such file or directory (2)

A primeira coisa que se percebe é que o código de caracteres não pode ser hexadecimal ou octal então eu pesquisei e encontrado somente esta . Portanto, pode ser um CURSOR UPpersonagem (ou não). eu tentei

ls -la *`printf '\033OA'`*

para nenhum proveito. Eu também tentei canalizar a saída de ls desse diretório odsem sucesso.

O que mais eu posso fazer? Ou que personagem estou procurando, afinal?

obrigado

luxifer
fonte
1
Tente ls -b, que deve mostrar escapes de estilo C
enzotib
obrigado ... que ajudou ... poderia movê-lo com a ajuda de printf então ... se você repost este comentário como resposta, eu vou com prazer aceitar isso :)
luxifer

Respostas:

9

Você pode usar a -bopção para ls, que mostra caracteres não gráficos como seqüências de escape no estilo C.

enzotib
fonte
1

ls -aqimprimirá todos os nomes de arquivo, com um em ?vez de cada caractere não imprimível. Em muitas variantes do unix, ls -ABou ls -Ab(verifique sua página de manual) imprime escapes octais. Com ls -aq, você pode usar a saída exibida como um padrão de shell.

$ ls -Aq
.?OA.tex.pyD0MB
… more stuff …
$ mv -i .?OA.tex.pyD0MB weird-file
$ less weird-file

Outra maneira de obter o nome do arquivo de alguma forma é usar a conclusão do seu shell: digite mv .e pressione Tabrepetidamente até que o nome estranho seja inserido.

Gilles 'SO- parar de ser mau'
fonte
ls -qnão mostrou o arquivo enquanto ls -bfez. talvez porque seu nome de arquivo não era [weird-character]OA.texmas realmente`printf %b '\033OA'`.tex
luxifer
@ luxux Há um .no início do nome do arquivo, então você precisa ls -Aqou ls -aq. E se você usar curingas shell, precisará .explicitar: *não incluirá o arquivo, mas .*incluirá.
Gilles 'SO- stop be evil'
não, não havia! A saída que publiquei foi do rsync e foi o fim da linha. O Rsync primeiro copia para $DESTINATION/.$FILENAMEantes de mover o arquivo para o nome correto. Portanto, na fonte, o arquivo não tinha .no início de seu nome. Além disso, como dito, ls -qnão teria mostrado o arquivo enquanto o ls -bfez.
luxifer,