Архив zip с ограниченным количеством файлов

Я предложил бы, чтобы Вы поместили LC_NUMERIC=en_US.UTF-8 /usr/bin/printf "%s %s %'d %'d\n" $(/usr/bin/tail -n 31 /var/log/bandwidth) в файле и chmod это к 770 и помещенный, что имя файла там в crontab.

12
10.04.2017, 22:25
3 ответа

Можно использовать параллель GNU , чтобы сделать это, поскольку она может ограничить число элементов заданием, а также обеспечить число задания (для уникального названия архива застежки-молнии):

$ touch $(seq 20)
$ find . ! -name "*.zip" -type f -print0 | parallel -0 -N 5 zip arch{#} {}
  adding: 1 (stored 0%)
  adding: 10 (stored 0%)
  adding: 11 (stored 0%)
  adding: 12 (stored 0%)
  adding: 13 (stored 0%)
  adding: 14 (stored 0%)
  adding: 15 (stored 0%)
  adding: 16 (stored 0%)
  adding: 17 (stored 0%)
  adding: 18 (stored 0%)
  adding: 19 (stored 0%)
  adding: 2 (stored 0%)
  adding: 20 (stored 0%)
  adding: 3 (stored 0%)
  adding: 4 (stored 0%)
  adding: 5 (stored 0%)
  adding: 6 (stored 0%)
  adding: 7 (stored 0%)
  adding: 8 (stored 0%)
  adding: 9 (stored 0%)
$ ls
1   11  13  15  17  19  20  4  6  8  arch1.zip  arch3.zip
10  12  14  16  18  2   3   5  7  9  arch2.zip  arch4.zip

опция -N 5 ограничивает количество файлов к 5 за архив и представлена застежка-молния вместо {}

{#} (дословно, чтобы не быть замененной вами во время вызова), заменяется числом задания, приводящим к arch1.zip , arch2.zip и т.д.

, опция-print0 к находит и -0 опция к , параллель в тандеме удостоверяется, что имена файлов со специальными символами правильно обрабатываются.

13
27.01.2020, 19:55

Альтернатива только для оболочки: обработка пакетов COUNT файлов через «$ {@: START: COUNT}» (диапазон позиционные параметры) и сдвигают COUNT при увеличении счетчика c для именования архивов:

set -- *
c=1
while (($#)); do
  if [ $# -ge COUNT ]; then
    zip ${c}.zip "${@:1:COUNT}"
    c=$((c+1))
    shift COUNT
  else
    zip ${c}.zip "${@}"
    shift $#
  fi
done
1
27.01.2020, 19:55

Принятый ответ меня устроил. :) НО, если у вас нет доступа к параллельному серверу (кто знает почему), вот альтернатива, которую я придумал раньше:

find . ! -name '*.zip' -type f | xargs -n 500 | awk '{system("zip myarch"NR".zip "$0)}'

Которая создаст myarch1.zip, myarch2.zip, myarch3.zip и т. Д. { {1}} Вы можете использовать трюк -0, который предложил Антон, если у вас странные имена файлов.

1
27.01.2020, 19:55

Теги

Похожие вопросы