Назад | Перейти на главную страницу

rsync кроме «последнего» файла

у меня есть 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 для поворота файлов журнала.

  1. Настройте свое приложение для сохранения файла журнала с другим окончанием, например .pcap.current
  2. Настройте logrotate, чтобы переименовать файл в .pcap при вращении
  3. rsync только файлы, заканчивающиеся на .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