tar número específico de arquivo

3

Eu tenho um diretório com arquivos 27K, eu gostaria de colocá-los em vários arquivos INDEPENDENT tar, cada um terá 5000 arquivos e o último, obviamente, terá 2K (27K não é divisível por 5).

Qual é a maneira mais rápida / fácil de fazer isso?

    
por soulSurfer2010 26.01.2012 / 07:07

2 respostas

8

Primeiro, crie arquivos com os nomes de arquivo para cada arquivo:

find <directory> | split -l 5000 - files.

Em seguida, crie os tars:

for f in files.*; do tar -cf $f.tar --files-from $f; done

Não testado, mas a ideia básica deve funcionar.

    
por 26.01.2012 / 07:26
0
#!/bin/bash
files=( dir/* )

n=1
for ((i = 0; i < ${#files[@]}; i+=5000)); do 
  IFS=$'\n' tar cvzf foo_$((n++)).tgz --files-from - <<<"${files[*]:i:5000}"
done

Explicação

Crie uma matriz chamada files que contenha todo o conteúdo do diretório dir . Iterar sobre o array, aumentando o iterador 5000 por vez. Use a expansão do parâmetro de deslocamento na matriz para executar uma janela deslizante de até 5000 itens por vez "${files[@]:i:5000}" e passar para tar e incrementar o nome do arquivo em um $((n++)) em cada ligar.

    
por 26.01.2012 / 07:32

Tags