como dividir todos os arquivos em um diretório em arquivos de 4GB para um diretório diferente?

3

Eu tenho um diretório contendo vários arquivos grandes, cada um com mais de 4 GB. Eu quero copiar todos esses arquivos para um diretório diferente (por acaso é uma unidade usb fat32 montada), mas dividir os arquivos para 4GB (já que a unidade de destino é limitada a arquivos de tamanho).

Eu tentei isso:

split -b 4096G /var/lib/backuppc/images/* /usbdrive/

mas recebo um

split: extra operand '/var/lib/backuppc/images/xxxxxxxxxmyfilesname.tib'

Estou fazendo algo errado? (também tentou "4G" em vez de 4096G, sem diferença)

    
por Scott Szretter 20.12.2011 / 16:24

2 respostas

4

Minha sugestão seria primeiro criar um arquivo tar:

tar -cf /tmp/bigfile.tar /var/lib/backuppc/images/*

depois divida isso:

cd /usbdrive
split -b 4G /tmp/bigfile.tar

Se você quiser evitar o uso do arquivo tar temporário, você pode canalizar o tar diretamente para dividir:

tar -cf - /var/lib/backuppc/images/* | split -b 4G

Para reconstruir isso quando chegar ao destino, recrie e desarquive o arquivo tar:

cat /usbdrive/x* >bigfile.tar
tar -xvf bigfile.tar

Novamente, para fazer isso sem o arquivo temporário:

cat /usbdrive/x* | tar -xvf -
    
por roadmr 20.12.2011 / 19:32
1

split não pode receber mais de um arquivo de entrada como argumento.

Você pode tentar usar find para isso

cd /var/lib/backuppc/images && find . -maxdepth 1 -type f -exec split -b 4G '{}' "/usbdrive/images/{}" \;
    
por arrange 20.12.2011 / 16:49