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

Кроме того, команды busybox не всегда имеют симлинк на busybox, или могут отсутствовать в вашем PATH. На RHEL6 работает "busybox stat -f /dev/XXXX".

0
06.10.2018, 05:20
3 ответа

Что касается определения 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

Это оставит вас с:

  1. filelist.txtсписок самых старых файлов
  2. backup.zipсодержимое самых старых файлов

Обратите внимание, что это не относится к вашему ограничению размера файла в 500 МБ. Один из подходов состоит в том, чтобы проверить размер zip-файла после его создания и, если он слишком велик, уменьшить количество файлов, которые вы включаете в архив.

2
28.01.2020, 02:31

Команда

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 МБ.

0
28.01.2020, 02:31

Хотя сохранение и повторный -анализ имен файлов может быть сложной задачей, если ваши имена файлов не содержат пробелов или новых строк, вы можете обращаться с ними менее осторожно. Я покажу метод с использованием 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[@]}.

0
28.01.2020, 02:31

Теги

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