Копирование новейших файлов

sed '/^<@\([^|]*\)\(.*\)>/!b
    s//\\autocite\2{\1}/
    s/|/[/;s/|/][/g;/\[/s/{/]{/
' <<\DATA
<@sample>
<@sample|12>
<@sample|12|c.>
DATA

OUTPUT

\autocite{sample} 
\autocite[12]{sample}
\autocite[12][c.]{sample}

Первое, что делает sed, это проверяет, что линия, над которой он работает, начинается с <@, за которой в какой-то момент следует >. Если линия не совпадает с этим шаблоном, то bранчо выходит из скрипта, чтобы начать следующий цикл линии и повторить попытку.

Но если она совпадает с sed выполняет небольшую двойную задачу, ссылаясь на \1 со всеми или любыми символами, следующими за @, которые не являются символом | и ссылаясь на \2 со всеми или любыми символами, следующими за первой последовательностью до последнего появления > на строке. На следующей строке - которая достигается только в случае совпадения первой строки - sed заимствует эти ссылки из первого адреса и заменяет всю строку на \\autocite\2{\1}.

В следующей строке sed пытается заменить первое появление символа | символом [, тогда больше не будет | символов с ][, и, наконец, если [ существует на строке, то он заменяет первое появление { на ]{.

Все, что делает sed, просто. Все, что делает sed, является прямым результатом того, что он только что сделал. sed очевидно - и иногда раздражающе - упорядочено.

И кстати - это должно обрабатывать столько | разделенных параметров, сколько можно было бы позаботиться о том, чтобы указать в одной строке - это не ограничивается двумя. Но при этом должны соблюдаться маркеры [<>@|{}] и расположение строк - по крайней мере, как написано. Пока вы следуете правилам, sed наверняка ничего не нарушит.

1
13.06.2014, 02:36
2 ответа

Вы можете запустить ls -rt через SSH на сервере в каталоге, чтобы узнать последний измененный файл (на основе даты последнего изменения вместо имени файла)

fileToCopy=$(ssh "$host" "cd $remote_path && ls -rt | tail -1")
scp "$host":"$remote_path"/"$fileToCopy" "$local_target_dir"/filename."$host"
1
27.01.2020, 23:52

Я предлагаю выяснить это, подтверждая вашу дату, и иметь в виду последнюю резервную копию, например:

#!/bin/bash
day=${date +%d}
last_month=${date -d "-1 month" date +%Y-%m-%d}
if [ $day -eq 15]
then
    echo "Is 15th, time to make get last backup!"
    scp -P port user@server:/dir/servername_BBC-3.0_$last_month* destination
fi
0
27.01.2020, 23:52

Теги

Похожие вопросы