Как сжимать файлы на основе даты файла

Как сжимать файлы на основе даты файла

У меня есть минимум 30 файлов в каталоге, который содержит более старые даты, например, за последние 7 дней. Теперь мне нужно сжать их на основе даты создания/изменения файла.

Например,
10 файлов с датой 7 апреля — создайте zip-архив для april7.zip
10 файлов с датой 8 апреля — создайте zip-архив для april8.zip
10 файлов с датой 9 апреля — создайте zip-архив для april9.zip

решение1

Обычный метод find -mtimeздесь использовать немного сложно, поскольку он проверяет возраст только относительно текущего момента времени.

С помощью GNU date и Bash мы могли бы сделать что-то вроде этого, чтобы добавить каждый файл в архив, соответствующий дате файла:

for f in * ; do 
    zip $(date -r "$f" +%F).zip "$f"        # 2017-04-07.zip
done

или:

for f in * ; do
    d=$(date -r "$f" +%B%d)
    zip ${d,,}.zip "$f"                     # april07.zip
done                                        # ${var,,} is for lowercase

( dateможно только прочитать время модификации. Для исправления формата вывода ctimeнам пришлось бы использовать и выполнить больше работы.)stat


Если по какой-то причине нам необходимо получить список всех файлов на определенную дату перед обработкой, мы можем собрать их в массив:

files=()
date="2017-04-07"
for f in * ; do 
    [ "$(date -r "$f" +%F)" = "$date" ] && files+=("$f")
done
# do something with "${files[@]}', e.g.
# zip $date.zip "${files[@]}"

Таким образом, за раз будет обрабатываться только одна заданная дата.

Связанный контент