Quando copio arquivos de uma partição ext3 para uma fat32 usando o cp:
cp -R /ext3/stuff /fat32/partition/
Recebo mensagens de argumento inválidas para todos os arquivos com dois pontos e pontos de interrogação.
Existe alguma maneira de o cp remover os caracteres inválidos do sistema de arquivos de destino?
edit: Verifiquei as opções do cp novamente e, a menos que eu esteja sendo estúpido, não há nada lá. Tenho certeza de que poderia escrever um script, mas parece que deve haver uma solução mais limpa!
fonte
Baseado no post de Gilles, testei a seguinte lista:
Tentei copiar isso no cartão MicroSDHC do telefone Android com sistema de arquivos vfat e
pax
comando refinado até que tudo funcionasse. Isso ainda pode não ser suficiente para Windows e Unicode:Você também pode usar a opção -k para garantir que não haja substituições (devido a colisões nos nomes dos arquivos). As duas listas que dei no comentário eram diferentes do comportamento do Linux vfat.
fonte
Recebi o "argumento inválido" ao copiar com cp -r source usbstick e descobri que a causa era um sourcefilename que terminava com um espaço. A remoção do espaço limpou a mensagem. O arquivo com nome incorreto estava entre os diretórios do programa de correspondência.
fonte
Eu só tinha motivos para fazer isso e, embora a
pax
resposta baseada fosse boa, ela ainda apresentava problemas com caracteres acentuados.Portanto, achei mais simples de usar
tar
e substituí-lo por todos os caracteres não permitidos por sublinhados:Sem dúvida, é possível criar uma lista melhor de caracteres permitidos do que o descrito acima, mas isso funciona.
fonte
Depois de ler as respostas para essa pergunta muito interessante e fazer algumas experiências com o cartão SD para Android (exfat) e um sistema de entretenimento para carros (vfat), eu vim com esse pequeno script do bash.
Ele pega o destino (ponto de montagem) como argumento e usa
find
para localizar todos os arquivos no meu repositório de música.Para cada caminho de arquivo, ele calcula um caminho de destino e um nome de arquivo, acrescentando o destino e substituindo qualquer caractere incorreto por um sublinhado
_
. Eu uso uma lista branca de caracteres (letras, números-
,/
,.
,.
(
,)
E_
) para remover qualquer pontuação indesejada.Dependendo da localidade, isso deixará letras acentuadas no caminho e no nome do arquivo, o que é bom para os sistemas de arquivos FAT modernos, ao que parece.
Para cada caminho e nome do arquivo de destino, os diretórios são criados conforme necessário
mkdir -p
, e o arquivo é copiado, a menos que já exista.Observe os
"
caracteres de cotação em vários lugares; eles são obrigados a impedir que caminhos e nomes com espaços neles se separem.fonte