find $MAILDIR/ -type f -printf '%T@ %p\n' | sort --reverse | sed -e '{ 1,100d; s/[0-9]*\.[0-9]* \(.*\)/\1/g }' | xargs -i sh -c "cat {}&&rm -f {}" | gzip -c >>ARCHIVE.gz
Эта команда перемещает все файлы, кроме последних 100, в указанном каталоге (maildir), в сжатый архив (archive.gz).
Подробности команды:
1. Команда «find» ищет все файлы в заданном каталоге (в этом случае $maildir/), и выводит время изменения файла и его путь.
2. Результат передается команде «sort —reverse», которая сортирует файлы в обратном порядке (от самых новых).
3. Команда «sed» удаляет время изменения файла, оставляя только путь к файлу.
4. Результат передается команде «xargs -i sh -c», которая выполняет команду «cat» (показывает содержимое файла) для каждого файла, а затем команду «rm -f» (удаляет файл).
5. Наконец, команда «gzip -c» сжимает вывод и перенаправляет его в файл «archive.gz» с помощью оператора «>>».
Альтернативной командой является использование утилиты «tar» вместо «find» и «gzip». Например, команда «tar -czf archive.tar.gz —exclude=’*.[0-9]*’ -C $maildir/ .» архивирует все файлы из каталога $maildir/, исключая файлы, содержащие числа в расширении.
Передаваемые аргументы команде: путь к каталогу ($maildir/).