Вот один способ:
$ files=( $(d=$(date +'%Y%m' -d '4 months ago');
for f in *.pdf; do [[ "${f:0:6}" -le "$d" ]] &&
printf '%s\n' "$f"; done;) )
$ tar cvzf backup.tgz "${files[@]}"
20140201_004.pdf
20150201_003.pdf
d = $ (date + '% Y% m' -d '4 месяца назад')
: установите переменную $ d
на желаемую дату. для f в * .pdf; делать ... ; done
: перебрать все файлы .pdf
в каталоге, сохраняя каждый как $ f
. [["$ {f: 0: 6}" -le "$ d"]]
: проверьте, меньше ли первые 6 символов имени файла чем или равно значению $ d
. && printf '% s \ n' "$ f"; done;
: если да, распечатайте имя файла. files = ($ (...))
: сохраните вывод вышеуказанного в массиве $ files
. Обратите внимание, что это предполагает, что все имена ваших файлов pdf
начинаются как минимум с 6 цифр, и в противном случае будет выдаваться жалоба. Вы можете сделать его более надежным, перебирая только те файлы PDF, которые:
for f in [0-9][0-9][0-9][0-9][0-9][0-9]*.pdf; do ...