Renomear arquivo com nome estranho na montagem do Samba

Renomear arquivo com nome estranho na montagem do Samba

Quero renomear um arquivo com nome estranho para algo razoável, mas não consigo :/

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Tentei usar o número do inode conforme recomendado em alguns lugares na internet:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

O que devo fazer?

Responder1

Resumo dos comentários relevantes:

Os sistemas de arquivos Unix permitem qualquer caractere em um nome de arquivo além de \0(nul) e /(barra). O fato de lsmostrar pontos de interrogação é apenas porque ele não pode exibir alguns dos caracteres do nome do arquivo na localidade atual (que é uma das razões pelas quaisvocê deve evitar analisar a saída dels).

No entanto, com um compartilhamento Samba, você aparentemente tem requisitos mais rígidos em nomes de arquivos do que em um sistema de arquivos Unix padrão.

Como o nome do arquivo era "ilegal" no compartilhamento intermediário do Samba, o arquivo estava inacessível pelo nome correto na máquina que estava montando o compartilhamento.

Isso mvnão funcionou, pois o nome retornado do compartilhamento do Samba para a expansão do padrão globbing não era o nome real do arquivo no sistema de arquivos de hospedagem, apenas a versão distorcida do nome do próprio Samba.

Sua solução foi fazer login no servidor que realmente hospedava o arquivo (em um sistema de arquivos com regras de nomenclatura menos restritivas que o Samba) e alterar o nome do arquivo lá. Este foi o curso de ação correto.

Veja também o Unix&Linuxconversar sobre esta questão.

Responder2

Antes de aprender sobre cotações em shells Unix, eu usaria diredo modo do emacs para renomear ou excluir arquivos difíceis de combinar. Você simplesmente abre o diretório no emacs:

emacs -q .

... então você pode usar as teclas de seta para navegar até o arquivo que deseja modificar e renomear o arquivo com R. ?fornecerá a lista de comandos disponíveis (você também pode excluir arquivos difíceis de combinar).

Então você C-x C-csai do emacs e pronto.

Responder3

Freqüentemente, com nomes de arquivos incomuns, você pode adicionar "./" antes do nome do arquivo e o Linux o reconhecerá corretamente. Por exemplo: $ls./?j?Z?R?C1_000c.jpg

informação relacionada