Кроме того, команды busybox не всегда имеют симлинк на busybox, или могут отсутствовать в вашем PATH. На RHEL6 работает "busybox stat -f /dev/XXXX".
Что касается определения 100 самых старых файлов, вы можете сделать что-то вроде:
ls -1tr /path/to/directory/cdr* | head -n100 > filelist.txt
-1
будет перечислять по одному файлу в строке (здесь это не обязательно ), -t
будет сортировать по времени модификации, сначала самые новые, а -r
изменит порядок сортировки на обратный (т. е. сделает его последним в списке ). Конвейер, который выводит на head -n100
, будет перечислять первые 100 строк (, т. е. 100 самых старых файлов ). Затем я перенаправляю вывод на filelist.txt
--, этот файл содержит имена 100 самых старых файлов.
Затем вы можете заархивировать эти файлы с помощью:
zip backup -@ < filelist.txt
Это создаст файл с именем backup.zip
с содержимым файлов в папке filelist.txt
. Параметр -@
указывает zip
читать имена файлов из стандартного ввода, а перенаправление предоставляет этот список из файла.
После того, как вы все это протестировали и посмотрите, работает ли это так, как вы хотите, вы можете удалить файлы вfilelist.txt
:
xargs rm < filelist.txt
Это оставит вас с:
filelist.txt
список самых старых файлов backup.zip
содержимое самых старых файлов Обратите внимание, что это не относится к вашему ограничению размера файла в 500 МБ. Один из подходов состоит в том, чтобы проверить размер zip-файла после его создания и, если он слишком велик, уменьшить количество файлов, которые вы включаете в архив.
Команда
ls -1tr | head -n 100
даст вам список из 100 самых старых файлов в каталоге.
Вы можете сохранить этот вывод в файл (, например. zip.in ). Затем вы можете использовать этот файл для создания zip-файла. Например:
zip zipfile.zip $(cat zip.in)
Что касается ZIP-файла, который должен быть меньше 500 МБ, вы можете рассчитать общий размер отдельных файлов, чтобы увидеть, превышает ли он 500 МБ. Однако, поскольку zip выполняет некоторое сжатие, это неверно. Вы узнаете об этом только после создания zip-файла.
Вы можете добавлять каждый файл из списка zip.in по одному в zipfile.zip.После добавления каждого из них вы можете проверить размер zipfile.zip, чтобы убедиться, что он превышает 500 МБ.
Хотя сохранение и повторный -анализ имен файлов может быть сложной задачей, если ваши имена файлов не содержат пробелов или новых строк, вы можете обращаться с ними менее осторожно. Я покажу метод с использованием zsh, в котором имена файлов никогда не анализируются напрямую.
Собрать имена файлов в массив:
files=( cdr*.csv(om[-100,-1]) )
Это говорит о том, что нужно сопоставлять имена файлов, которые начинаются с cdr
и заканчиваются на .csv
, но o
упорядочивать эти файлы по времени их модификации, а затем выбирать только 100 самых старых из них.
Вы можете распечатать их в файл различными способами, например,:
print -l $files > filelist.txt
printf 'File: %s\n' $files
Чтобы создать zip-файл из этих файлов,:
zip zipfile $files
... где в каждом экземпляре zsh заменяет переменную $files
каждым элементом. Более осторожным способом сделать то же расширение было бы использование вместо этого ${files[@]}
.