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 número do inode, como foi 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?
ls
nesse diretório? O arquivo é mostrado como um arquivo regular? Estou pedindo para ter certeza de queNo such file or directory
há um erro oculto e não indicativo de um sistema de arquivos danificado.fsck
? Eu posso estar corrompido. Como o arquivo adquiriu esse nome?ls
)?
letras que não podem ser exibidas. Tente mudar para uma fonte totalmente unicode.*_000c.jpg
mas quemv
não pode processar o arquivo. Isso é, IMHO, indicativo de um sistema de arquivos corrompido. ... ou possivelmente de um sistema de arquivos montado em um compartilhamento de rede que desapareceu (com as entradas de diretório ainda em cache), ou algo assim.Respostas:
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 dels
mostrar pontos de interrogação é apenas porque ele não pode exibir alguns dos caracteres do nome do arquivo no código do idioma atual (que é um dos motivos pelos quais você deve evitar analisar a saída dels
).No entanto, com um compartilhamento Samba, você aparentemente possui requisitos mais rígidos em nomes de arquivos do que em um sistema de arquivos Unix padrão.
Como o arquivo tinha um nome "ilegal" no seu compartilhamento intermediário do Samba, o arquivo estava inacessível por seu nome correto na máquina que estava montando o compartilhamento.
A
mv
não funcionou desde o nome retornado a partir do compartilhamento Samba para a expansão do padrão globbing não era o nome real do arquivo no sistema de arquivos hospedagem, apenas a própria versão mutilada de Samba do nome.Sua solução foi efetuar login no servidor que realmente hospedou o arquivo (em um sistema de arquivos com regras de nomeação menos restritivas que o Samba) e alterar o nome do arquivo. Este foi o curso de ação correto.
Veja também o bate-papo sobre Unix e Linux sobre esta questão .
fonte
Antes de aprender a citar em shells unix, usava o
dired
modo emacs para renomear ou excluir arquivos difíceis de combinar. Você simplesmente abre o diretório no emacs:... então você pode usar as teclas de seta para navegar até o arquivo com o qual deseja modificar e renomear o arquivo
R
.?
fornecerá a lista de comandos disponíveis (você também pode excluir arquivos difíceis de combinar).Então você acaba de
C-x C-c
sair do emacs e pronto.fonte
Geralmente, com nomes de arquivos incomuns, você pode adicionar "./" antes que o nome do arquivo e o Linux o reconheçam adequadamente. Por exemplo: $ ls ./?j?Z?R?C1_000c.jpg
fonte