“mv” arquivo com nome ilegível por número de inode?

6

Eu tenho vários arquivos com problemas de codificação em seus nomes de arquivos (trema alemã, gravada em CD com Windows, lida pelo Windows e sincronizada com o Linux com o Seafile. Algo em algum lugar deu errado ...). Bash e zsh mostram apenas "?" em vez de umlauts, stat mostra algo como

$ stat Erg�nzung.doc 
File: ‘Erg4nzung.doc’
Size: 2609152         Blocks: 5096       IO Block: 4096   regular file
Device: 806h/2054d      Inode: 12321475    Links: 1

Eu só posso inserir o nome do arquivo com autocompletar. Como renomeio o arquivo? Os arquivos afetados parecem ilegíveis pelo LibreOffice (ou outros programas para outros tipos de arquivos), eles reclamam de "Nenhum arquivo ou dispositivo".

Eu estava pensando em mv --by-inode 12321475 Ergänzung.doc , mas não há mudança de --by-inode para mv . O que mais posso fazer?

    
por Jasper 11.10.2015 / 15:28

3 respostas

11

Você pode tentar:

find . -inum 12321475 -exec mv {} new-filename \;

ou

find . -inum 12321475 -print0 | xargs -0 mv -t new-filename

Geralmente eu prefiro xargs over exec. Google porquê. É complicado, no entanto. Veja Encontre -exec + vs find | xargs. Qual escolher?

    
por 11.10.2015 / 15:52
3

Existe um utilitário convmv para este tipo de problema. Permite que você mude a codificação de um nome de arquivo, por exemplo, windows cp1256 to utf8, etc.

    
por 11.10.2015 / 16:00
1

Apenas para registro, o uso correto de xargs -0 é:

find . -inum 12321475 -print0 | xargs -0 -I '{}' mv '{}' new-filename

mas como já foi dito, não foi necessário de qualquer maneira.

    
por 11.10.2015 / 23:05