Недостаточно места на жестком диске, поскольку сжатие происходит недостаточно быстро

Я загружаю файлы (параллельно), которые содержат очень большой объем данных (файлы fastq), в каталог. У меня быстро заканчивается свободное место. Я получил следующий сценарий (из здесь , слегка измененный) для сжатия файлов по мере их загрузки:

inotifywait -m ./ -e create -e moved_to |
    while read dir action filepath; do
        echo "The file '$filepath' appeared in directory '$dir' via '$action'"
        # compress file
        if [[ "$filepath" =~ .*fastq$ ]]; then
            pigz --best $filepath
        fi
    done

Это помогло в том, что у меня кончилось свободное место на жестком диске позже, но я все еще загрузка файлов быстрее, чем я сжимаю. Есть ли способ распараллелить процесс сжатия, чтобы я сжимал несколько файлов одновременно? (Я предполагаю, что приведенный выше код этого не делает)

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

2
задан 16 June 2020 в 22:28

2 ответа

Я сделал кое-что для тебя, я назвал его Цербером, из сторожевого пса.

https: / /pastebin.com/yiqajYfT

В ваших загруженных именах файлов не должно быть пробелов, поэтому, если они появятся во время загрузки, переименуйте их и удалите пробелы, иначе они не будут обнаружены.

скомпилируйте с помощью gcc -ocerberus cerberus. c

вам понадобится подкаталог, в который будут помещаться сжатые файлы. Ваши исходные файлы будут удалены после сжатия, если вы не хотите, чтобы это происходило, закомментируйте строку 63. Вы можете изменить имя каталога сжатия (рабочий каталог), программу сжатия и расширение сжатых файлов в разделе определений, строки 9-11. Если ваши имена файлов длиннее 100 символов, увеличьте MAXNAME в строке 12.

Удачи!

0
ответ дан 19 June 2020 в 21:23

Один из способов сделать это - использовать небольшую программу на C, которая будет разветвляться на каждый новый файл, добавленный в каталог, тогда ребенок сожмет и отсоединит (удалит) исходный файл (ы).

на уровне сценария, если запустить несколько экземпляров, это даст вам это, но да, это ужасный способ решения вашей проблемы.

другой Идея, которая приходит мне в голову, ->
запустите ваш скрипт в цикле, используйте notify, чтобы сообщить другому процессу о сжатии вашего файла.

0
ответ дан 19 June 2020 в 21:23

Другие вопросы по тегам:

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