Сжать множество каталогов, содержащих до 1000 файлов в архиве

Рабочее решение для привязки драйвера к устройству:

cgublock: jz4780-cgublock@10000000 {
    compatible = "simple-bus", "syscon";

    #address-cells = <1>;
    #size-cells = <1>;

    reg = <0x10000000 0x100>;
    ranges;

    cgu: jz4780-cgu@10000000 {
        compatible = "ingenic,jz4780-cgu";
        reg = <0x10000000 0x100>;

        clocks = <&ext>, <&rtc>;
        clock-names = "ext", "rtc";

        #clock-cells = <1>;
    };

    rng: rng@d8 {
        compatible = "ingenic,jz4780-rng";
        reg = <0x100000d8 0x8>;
    };
};

Это было обнаружено путем изучения других примеров. Я бы предпочел решение, в котором я получаю правильный диагноз, почему предыдущая попытка неверна.

0
03.12.2019, 12:04
2 ответа

Copyright James Daniel Marrs Ritchey. This material was created for submission at 'Compress many directories with up to 1000 files in archive', but can also be alternatively obtained from 'https://snippetly.blogspot.com/2019/12/zip-files-recursively-from-directories.html' under the terms of any of the following licenses: Comprehensible Open License 3.0 (https://jamesdanielmarrsritchey.blogspot.com/2019/06/comprehensible-open-license-30.html), MIT (https://opensource.org/licenses/MIT).

С помощью PHP можно создавать zip-файлы с указанным количеством файлов в zip-архиве для каждой папки. Начните с получения массива, содержащего все каталоги, которые вам нужно обработать. Затем выполните цикл по каждому каталогу и создайте массив файлов. Теперь создайте новый массив этих файлов, который содержит X файлов на значение массива. Затем переберите этот массив и с помощью 7zip и передайте значение, чтобы 7zip мог заархивировать все эти файлы.

Мой код ниже настроен на 5 файлов в одном zip-архиве. Вы можете изменить это на любой номер, который вы хотите. Вам понадобятся установленные p7zip, find и php7.

Код:

<?php

$top_directory = '/home/user1/files_to_zip';

$destination = '/home/user1/zips';

#Get a list of folders, including the top directory

$dirs = shell_exec("find $top_directory -type d");

#Deal with each directory separately

$dirs = explode("\n", $dirs);

$dirs = array_filter($dirs);

foreach ($dirs as $dir){

    $zip_name = basename($dir);

    #Get a list of files within one directory

    $files = shell_exec("find $dir -maxdepth 1 -type f");

    #Split list of files for one directory into array

    $files = explode("\n", $files);

    $files = array_filter($files);

    if (empty($files) === TRUE){

        goto end;   

    }

    #Create a new array which holds 5 files per value (each value should be formatted as expected by the ZIP utility for a list of files)

    $n = 0;

    $list = array('');

    foreach ($files as $file){

        $n++;

        if ($n <= 5){

            $keys = array_keys($list);

            $key = end($keys);

            $list[$key] = $list[$key]. " ". $file;

        } else {

            $n = 1;

            $list[] = '';

            $keys = array_keys($list);

            $key = end($keys);

            $list[$key] = $list[$key]. " ". $file;

        }

    }

    #Create the zip archives of files for the one directory

    $n = 0;

    foreach ($list as $value){

        $n++;

        $zip_name_2 = "{$zip_name}_{$n}.zip";

        shell_exec("cd $destination && 7z a $zip_name_2 $value");

    }

    end:

}

?>
0
28.01.2020, 03:03

Для этого я использую tar. Пока у вас есть папка со многими каталогами внутри, выполнение каталога tar -czvf имя_файла.tar заархивирует все папки в один файл tar.

см.:https://www.howtogeek.com/248780/how-to-compress-and-extract-files-using-the-tar-command-on-linux/

0
28.01.2020, 03:03

Теги

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