1

У меня есть несколько подпапок (A, B, C, D ..) на удаленном сервере, который содержит около 100.gz файлов. Шаблон именования файлов имеет вид ND2_58_20151105173030_20151105173240_1234.log.gz, где 3-е и 4-е поля после _ - это время начала и окончания. Теперь, если время начала / окончания составляет 15 минут от текущего времени, я хочу получить этот файл.Может кто-нибудь предложить мне, как это сделать с помощью сценария оболочки.Для получения данных я использую rsync.

Спасибо Арн

2 ответа2

1

Вы можете использовать опции --include и --exclude для rsync чтобы выбрать только те файлы, которые вам нужны. Если я правильно понимаю ваш вопрос, вам нужны файлы, имя которых содержит текущую дату / время плюс или минус 15 минут. Не уверен, что вам нужно ровно 15 минут, но вот небольшой скрипт, который может сделать это:

#!/bin/sh

format='%Y%m%d%H%M'

for delta in $(seq -15 15); do
    p='--include=*_'$(date +$format --date "+ $delta minutes")'*_*.gz'
    include="$include $p"
done

rsync -av $include --exclude=* SRC/ DEST/

Должен быть легко модифицирован ровно за 15 минут.

0

Если вы можете доверять данным из файловой системы, вы можете использовать find и rsync вместе.

find /path -file -mmin +15 -exec rsync {} destination \;

или с обратной логикой и только одним процессом rsync

rsync --files-from=<(find /path -mmin +3 -type f -exec basename {} \;) /src_path/ /dst_path

Ссылка

Вы можете посмотреть на это [ответы] [ 1, 2, 3 ], например ...

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .