eudyptula-boot
довольно удобен для этого; его вводный пост в блоге содержит больше деталей, но в основном он позволяет загружать виртуальную машину, используя ядро, которое вы хотите проверить, и ваши существующие файловые системы (с помощью overlayfs
). Таким образом, вы можете быстро проверить ядро без перезагрузки, и при этом у вас остается доступ ко всем вашим файлам.
Единственное требование к проверяемому ядру - поддержка overlayfs
и 9p
; их легко активировать в конфигурации ядра перед сборкой.
С этим форматом даты вы можете использовать порядок строк в awk
, например:
files=( $(ls | awk -v d=$(date -d '4 months ago' +%Y%m%d_999.pdf) '$1<d {print;}') )
tar cvfz backup.tar.gz "${files[@]}"
Программа awk
считывает входные строки и применяет к ним свои правила. В этом случае он сначала вызывается с переменной d
, установленной как дата отсечения, преобразованная в имя файла. Затем для каждой строки он сравнивает первое слово ( $ 1
) с датой отсечения ( d
) в алфавитном порядке, и там, где ввод находится перед клипом, он печатает линия (иначе нет).
Чтобы обрезать по месяцам, измените % d
на 00
, чтобы исключить месяц четыре месяца назад, или 99
, чтобы включить месяц четыре. мотыльков назад.
Пожалуйста, проверьте этот сценарий в соответствии с вашими требованиями. Надеюсь, что это работает для вас. Измените его в соответствии с вашими требованиями
lines=`expr 0 + 0`
maxlines=`expr 0 + 100`
while [ 1 -le 5 ] ; do
d=`date +%G%m%d`
count=`ls -1 | grep $d |wc -l`
c=`expr $count + 0`
while [ $c -gt 0 ]; do
file=`ls -1 | grep $d |tail -$c |head -1`
searchFile=`grep $file tmp | head -1 | wc -l`
searchFile=`expr $searchFile + 0`
if [ $searchFile -eq 0 ]; then
cp $file /home/avinash/f
echo $file >>tmp
lines=`expr $lines + 1`
fi
c=`expr $c - 1`
done
if [ $lines -gt $maxlines ]; then
k=`date +%G%m`
grep $k tmp > t
mv -f t tmp
lines=`expr 0 + 0`
fi
done
Этот скрипт выберет только файлы на сегодняшнюю дату по времени сервера. Этот скрипт работает в бесконечном цикле.
Таким образом, всякий раз, когда в каталоге появляется новый файл, он проверяет имя файла, и если имя содержит сегодняшнюю дату, он помещает файл в каталог home / avinash / red
, откуда его выбирает сервер PI. для чтения.
Измените имя папки по своему усмотрению. Теперь в папке / home / avinash
вам нужно сохранить файл с именем temp
, этот файл будет содержать только одно слово или любой символ, скажем привет
. Использование temp состоит в том, чтобы собрать все имена файлов, которые сценарий уже перенес в папку PI. Таким образом, если скрипт передал файл, скажем, ABC_20110725.txt
и DEF_20110725.txt
, то tmp
будет иметь содержимое
Вот один способ:
$ 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 ...