Я хочу сделать cronjob, который делает копию каждого файла в / var / log и помещает его в / etc / bak. Это я делаю, создав файл sh со словами
cp /var/log/*.* /etc/bak
. Я бы хотел, чтобы эти файлы не перезаписывались, а были уникальными. Для этого я решил поставить дату / время в имени файла. Есть ли способ сделать это возможным для копии пакетного файла?
Как насчет того, чтобы поместить каждый пакет файлов журнала в отдельном каталоге. Вы могли сделать это использование:
dir=/etc/bak/`date "+%Y-%m-%d_%H.%M.%S"`
mkdir "$dir"
cp /var/log/*.* $dir
Если Вы хотите снабдить префиксом все скопированные файлы метку времени, можно сделать:
(cd /var/log && ls -1 *.*) | awk -v date=`date "+%Y-%m-%d_%H.%M.%S"` '{ print "cp /var/log/" $0 " /etc/bak/" date $0}' | sh
Чтобы скопировать файлы в другой каталог и изменить их имена в процессе выполнения, я бы рекомендовал использовать цикл for.
Следующий код извлекает имя файла, используя basename
, затем создает копию этого файла в /etc/bak
с именем, подобным оригинальному файлу, с прикрепленной датой.
for file in /var/log/*; do
bn=$(basename $file)
cp $file /etc/bak/${bn}.$(date +%F)
done