Precisa de um script de shell para copiar arquivos com nomes longos e sem capacidade

1

Eu tenho um diretório em um sistema de arquivos NTFS que contém arquivos com nomes curtos e longos, eu inseri o comando copy para aquele diretório a ser copiado em um sistema de arquivos Ext2, arquivos com nomes curtos copiados sem problema mas copiando arquivos com nomes longos foi falhou, eu recived erro "File name too long", porque o número desses arquivos é muito alto Eu preciso de um script de shell para resolver o problema em duas etapas:

1-Copie o diretório e exclua os arquivos copiados que possuem nomes curtos (eu sei que o comando move faz isso, mas eu quero usar o comando copy)

2-Remova entre 15 e 20 caracteres do final dos nomes dos arquivos restantes que possuem nomes longos, após isso vou repetir os passos até que todos os arquivos sejam copiados.

Obrigado.

    
por Guest 27.04.2015 / 14:03

1 resposta

2

Para copiar e truncar nomes de arquivos em tempo real, você poderia fazer:

cd /src &&
LC_ALL=C pax -rws'|\([^/]\{255\}\)[^/]*||g' ./* /dst/

para truncar para componentes de caminho de 255 bytes.

Observe que ele pode truncar um nome de arquivo no meio de um caractere se houver caracteres de multibyte nesses nomes de arquivo.

Ele também atualizará os alvos de links simbólicos (embora eu não tenha certeza se o ntfs suporta links simbólicos de qualquer maneira).

Note que você pode acabar tendo os arquivos sobrescritos uns aos outros se vários arquivos tiverem os mesmos primeiros 255 bytes.

    
por 27.04.2015 / 14:40