Erro de espaço em branco ao lidar com arquivos

0

minhas necessidades é copiar todos os arquivos e pastas de uma pasta "master" para todas as chaves usb montadas.

Então, eu escrevi este código:

for usb_key in 'ls /media/';
    do
        for file in 'ls -a /home/daniele/USB/MASTER';
            do
                cp /home/daniele/USB/MASTER/"$file" /media/$usb_key/"$file"
            done;
    done;

for usb_key in 'ls /media';
    do
        umount /media/$usb_key
    done;
#alert me that the work is done
totem /home/daniele/USB/0016.mp3 &
exit

Mas, se eu tiver uma pasta chamada "DO NOT DELETE" em /home/daniele/USB/MASTER , isso gera um erro dos nomes dos arquivos.

Então, como posso resolver isso? Existe uma maneira de substituir todos os espaços em branco no $file var com \ ?

    
por Strae 10.11.2010 / 10:59

1 resposta

2

E isso? Eu não sei porque você tem que iterar cada arquivo e porque você não pode simplesmente copiar o lote ... Mas isso deve funcionar um pouco melhor do que analisando a saída de ls .

for usb_key in /media/*;
do
    cp -Ra /home/daniele/USB/MASTER/* $usb_key
    umount /media/$usb_key
done;

#alert me that the work is done
totem /home/daniele/USB/0016.mp3 &
exit

Apenas para explicar o que está acontecendo, para quebras em todos os espaços ao analisar a entrada externa (como era com seu código). Você pode ver isso em operação, indo para um diretório com arquivos espaçados e em execução:

for file in 'ls -1'; do echo $file; done

No meu diretório de TV, vejo a saída como:

The
Big
Bang
Theory
The
Cleveland
Show
The

Acho que existe uma maneira de alterar as seqüências de quebra, mas é mais fácil usar a sintaxe nativa de localização de arquivos do bash. Ou use find ... -exec ... , que é muito poderoso em si.

    
por Oli 10.11.2010 / 11:07