Назад | Перейти на главную страницу

Создание tar из файлов в определенном диапазоне дат

У меня проблемы с получением данных с моего общего хостинга. У меня есть папка размером примерно 20 ГБ, в которой содержится около 40 000 изображений. Я попытался заархивировать эту папку, разделив файлы архива:

tar -cvpj 'home/public_html/images/'/ | split -d -b 100m - images.tar.bz2.

Он работает нормально, но проблема в том, что процесс занимает слишком много времени, и я предполагаю, что мой хостинг-провайдер убивает процесс в середине процесса архивирования.

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

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

Нашел вопрос: Как вы можете использовать только файлы tar в каталоге на основе определенного имени файла? но мне нужен конкретный диапазон дат.
Как я могу архивировать / сжимать и фильтровать файлы по их дате? Или есть другие способы получить мои файлы оттуда. Я пробовал использовать cPanel, но он пропустил эту папку.

Думаю, я бы сделал это с помощью find, а затем передал бы этот ввод в tar. В вашем примере предположим, что вам нужны файлы возрастом от 60 до 90 дней.

найти / home / public_html / images -type f -daystart -mtime -90 -and -mtime +60 -print0 | xargs -0 tar -Ajf images_60-90.tar.bz2

В нем будут перечислены все файлы, которые в последний раз были изменены более 60 дней назад и менее 90 дней назад, и они будут помещены в архив с именем images_60-90.tar.bz2. Мое использование -print0 и xargs в основном предназначены для защиты от файлов с пробелами в именах, и в случае, если файлов так много, что они превышают максимальную длину командной строки (которую можно найти, запустив команду getconf ARG_MAX). Я не тестировал эту команду и не знаю, что произойдет, если вы воспользуетесь опцией добавления, когда файл не существует, поэтому вам, возможно, придется внести дополнительные изменения.

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

найти / home / public_html / images -type f -daystart -mtime -90 -and -mtime +60 tar -cjf images_60-90.tar.bz2