Ubuntu - como copiar arquivos e pastas que contenham caracteres especiais

0

Eu tenho um sistema de arquivos montado somente para leitura que possui muitos arquivos com caracteres especiais como & , ( e " . Eu gostaria de copiar recursivamente todos os arquivos e pastas para um volume externo exFat usando cp -R , mas quando eu tento recebo muitos erros que se parecem com:

cp: cannot create regular file ‘/media/How About Better Parents?.pdf’: No such file or directory

Existe uma maneira de copiar esses nomes de arquivos que contêm caracteres válidos, mas especiais?

    
por user2926302 09.06.2016 / 05:39

2 respostas

3

Você pode fazer isso em etapas, criando uma lista dos arquivos e o novo nome para cada um. Você provavelmente teria que criar os diretórios de destino primeiro. Se a estrutura do diretório for relativamente plana, você poderá fazer isso manualmente com mkdir -p path . Se houver muitos diretórios, mas eles não contiverem espaços ou caracteres de destino ilegais que você possa usar (digamos de / dvd para / media)

cd /media ; ( cd /dvd ; find . -type d ) | xargs mkdir -p

Isso coloca você no diretório de destino (pronto para o mkdir ) e, em seguida, lista todos os diretórios abaixo do diretório de origem, enviando-os para mkdir . Você pode usar find option -print0 juntamente com xargs option -0 se precisar de espaços nos nomes de diretório.

Em seguida, use find para criar a lista de arquivos a serem copiados, digamos com

cd /dvd ; find . -type f | sed 's/\(.*\)/cp "" ""/' > /tmp/copy.sh

Em seguida, edite o arquivo /tmp/copy.sh , substituindo todos os caracteres ilegais nos nomes de destino. Para cada nome de arquivo, o comando sed insere cp antes dele e, em seguida, o nome do arquivo entre aspas duplas (origem) e o nome do arquivo entre aspas duplas novamente (destino). Uma vez que você tenha essa aparência aceitável, torne o copy.sh executável e execute-o.

Aviso de isenção: como sempre, é possível copiar arquivos para o lugar errado, preencher um sistema de arquivos, etc, então tente alguns comandos manualmente e verifique o resultado antes de executar uma massa inteira deles. Você pode testar o comando xargs mkdir tentando xargs echo mkdir primeiro para ver o que ele fará.

    
por Jeffrey Ross 09.06.2016 / 23:23
2

Você precisará usar um sistema de arquivos diferente de exFAT. De acordo com o artigo da Wikipedia , os caracteres permitidos em nomes de arquivos são:

% bl0ck_qu0te%     
por Anthony Geoghegan 09.06.2016 / 10:37