у меня есть Linux
сервер с ротацией логов на каждые 10 МБ. Я бы хотел либо scp
или rsync
все готовые файлы в удаленное хранилище.
Это возможно rsync
кроме самого нового файла на постоянной основе, поэтому rsync
произойдет, как только будет повернут новый файл журнала?
Мое именование файлов:
trace_00003_20190207134624.pcap
trace_00004_20190207144533.pcap
trace_00005_20190207154446.pcap
Так что в этом случае trace_00005_20190207154446.pcap
будет активно записываться и не должен быть пойман rsync
.
Я бы поэкспериментировал с find
и посмотрите, можно ли оставить в покое файлы старше 15 минут или что-то в этом роде. например:
# only rsync files older than 15 minutes
rsync -av $(find /var/pcap_dir/ -type f -mmin +15 | xargs) /tmp/dest/
Я помню, что столкнулся с ограничением количества файлов xargs
можно обработать за один снимок, так что вы можете проверить это. IIRC был уже в тысячах, так что с горсткой все должно быть хорошо. Кроме того, пробелы или мета-символы оболочки в именах файлов, вероятно, будут мешать работе, поэтому обязательно работайте с безопасными для оболочки именами файлов.
РЕДАКТИРОВАТЬ: или просто перенести скрипт (непроверенный)
#!/bin/bash
# myscript.sh find files 15 minutes old, or older. tar them up with bzip2 compression
find /var/pcap_dir/ -type f -mmin +15 | xargs tar cfj /tmp/results.tbz --files-from -
затем запустите сценарий удаленно, чтобы перетащить архив на локальный компьютер:
scp myscript.sh remotehost:/tmp/
ssh remotehost "/tmp/myscript.sh"
scp remotehost:/tmp/results.tbz /tmp/
ssh remotehost "rm -f /tmp/results.tbz"
Если вы можете изменить имя исходного файла журнала, вы можете сделать это довольно легко. Я предполагаю, что вы используете logrotate для поворота файлов журнала.
.pcap.current
.pcap
при вращении.pcap
Никаких ухищрений с поиском или другими фильтрами.
Ваш вопрос несколько двусмысленный. Я объясню:
Вариант 1: сделайте резервную копию всех файлов размером не менее 10 МБ.
Вариант 2: резервное копирование всех файлов Кроме тот, у которого самая последняя отметка времени.
Я предполагаю, что вы имеете в виду вариант 1: вариант 1 ответа.
Вы можете использовать найти команда, чтобы захватить каждый файл размером более 10 МБ и отправить его в scp / rcp команда.
find дорожка -type f -size +10M -exec scp {} место назначения \;
Обратите внимание \; в конце. Не забывай об этом!
Вариант 2 ответа.
Проверено в csh &трепать
ls -rt [path]/[file_wildcard] | sed '$d' | xargs -i rm -f {}
Для файлов, названных в качестве вашего примера, этот код позволит вам выполнять любые действия со всеми, кроме самого последнего, но будьте осторожны, потому что только в случайной группе файлов он может соответствовать не только последнему.
for file in `ls | grep -v \`ls -ltr | tail -1 | awk '{ print $9 }'\``; do echo $file;
done
В этом примере просто выводятся имена; замените echo $ file на команду rsync.
Тест:
[pt@NDC1ASCEM2DES1 test]$ ll
total 0
-rw-r--r-- 1 pt868x sysadmin 0 Feb 20 17:00 trace_00005_20190207154446.pcap
-rw-r--r-- 1 pt868x sysadmin 0 Feb 20 17:00 trace_00003_20190207134624.pcap
-rw-r--r-- 1 pt868x sysadmin 0 Feb 20 17:01 trace_00004_20190207144533.pcap
[pt@NDC1ASCEM2DES1 test]$ for file in `ls | grep -v \`ls -ltr | tail -1 | awk '{ print $9 }'\``; do echo $file; done
trace_00003_20190207134624.pcap
trace_00005_20190207154446.pcap
[pt@NDC1ASCEM2DES1 test]$ for file in `ls | grep -v \`ls -ltr | tail -1 | awk '{ print $9 }'\``; do rsync $file NDC1ASCEM2DES2:$file; done
pt@ndc1ascem2des2's password:
pt@ndc1ascem2des2's password:
[pt@NDC1ASCEM2DES1 test]$ ssh ndc1ascem2des2 "ls"
pt@ndc1ascem2des2's password:
trace_00003_20190207134624.pcap
trace_00005_20190207154446.pcap