У меня есть минимум 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[@]}"
Таким образом, за раз будет обрабатываться только одна заданная дата.