Renomear arquivo com nome estranho na montagem do Samba

10

Eu quero renomear o 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

Eu tentei usar o inode como recomendado em alguns lugares da 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?

    
por graywolf 12.04.2017 / 15:44

3 respostas

16

Resumo dos comentários relevantes:

Os sistemas de arquivos Unix permitem que qualquer caractere em um nome de arquivo seja diferente de / (nul) e ls (barra invertida). O fato de ls mostrar 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 quais você deve evitar analisar a saída de mv ).

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

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

O %code% não funcionou, pois o nome retornado do compartilhamento Samba para a expansão do padrão globbing não era o nome real do arquivo no sistema de arquivos hosting, apenas a versão do nome do Samba.

Sua solução foi entrar no servidor que realmente hospedou 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 correto de ação.

Veja também o chat do Unix & Linux sobre esta questão .

    
por 12.04.2017 / 16:17
-2

Antes de aprender a citar em shells unix, eu usaria o modo dired do emacs para renomear ou excluir arquivos de difícil correspondência. 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 que são difíceis de serem correspondidos).

Então você só C-x C-c saiu do emacs e está pronto.

    
por 12.04.2017 / 21:14
-3

Geralmente com nomes de arquivos incomuns, você pode adicionar "./" antes do nome do arquivo e o Linux irá reconhecê-lo corretamente. Por exemplo: $ ls ./? j? Z? R? C1_000c.jpg

    
por 13.04.2017 / 01:11