"tar -czf" para os primeiros 5 mil arquivos

"tar -czf" para os primeiros 5 mil arquivos

Eu tenho um diretório com muitos arquivos nele.

Quero compactar os primeiros 5 mil arquivos nesse diretório file.tar.gze depois 5.001 - 10.000 ... e assim por diante

como fazer isso?

Responder1

Use ls para gerar a lista de nomes e head e tail para filtrá-los. Aqui está uma linha que faz isso em um loop. Você precisará saber o número de arquivos no diretório (ls | wc -l lhe dirá).

for ii in $(seq -w 5000 5000 NUMBER_OF_FILES) ; do echo $ii ; ls | head -n $ii | tail -n 5000 | tar -f ../ARCHIVE_FILE_$ii.tar.gz -czv -T - ; done

Substitua os bits em maiúsculas pelo que você deseja.

Responder2

Este script adiciona gradualmente todos os arquivos ao arquivo e numera o arquivo. Renomeie ARCHIVE_NAME e '5000'.

$ COUNT_MOD=0; for i in *; do tar -r -f ARCHIVE_NAME`expr $COUNT_MOD / 5000`.tar $i; ((COUNT_MOD++)) ; done

Este script não está otimizado, portanto existem algumas regras:

  1. ARCHIVE_NAME# não deve existir ao iniciar este script, então se algo falhar, faça um 'rm ARCHIVE_NAME*'.
  2. Uma entrada de diretório é tratada como 1 entrada pelo script, mas não como 'tar'. Tar irá para o diretório e adicionará todos os arquivos recursivamente, e você poderá acabar com mais de 5.000 arquivos em um arquivo.
  3. Arquivos compactados não podem ser atualizados, deixei de fora '-z', desculpe :-)

Responder3

Você poderia construir um conjunto de arquivos que liste cada 5.000 nomes de arquivos e usá-los com os argumentos -T para tar. Algo assim pode funcionar:

ls -1 | split -l 5000 - tarlist
count=0
for f in tarlist*
do
    tar -czf save.$count.tar.gz -T $f
    count=`expr $count + 1`
done

informação relacionada