URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 10133
[ Назад ]

Исходное сообщение
"Два дня ЛОР героически сражался с Rsync..."

Отправлено chukcha , 11-Дек-16 00:49 
Понадобилось решить, казалось бы, очень простую задачу - осуществить резервное копирование с диска на диск,
исключив из него папки и файлы, лежащие ниже некоторых задаваемых папок.
Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.
Первым делом быстренько накидал свой вариант

rsync    -avpH      \
--exclude="home/chukcha/.cache/mozilla/firefox/*"                    \
--exclude="home/chukcha/.config/chromium/Default/*"                  \
--exclude="home/chukcha/.cache/moonchild productions/pale moon/*"    \
/home   /mnt/sdc1/

Но я очень плохо разбираюсь в премудростях синтаксиса Rsync, поэтому не удивительно, что он не заработал.
Тогда обратился за помощью к легендарному ЛОРУ - https://www.linux.org.ru/forum/general/13066819

Два дня лоровцы героически сражались с этой задачей, но увы, не справились.
Сдается мне, уже и не справятся, не по зубам, видно, потому обращаюсь за помощью к вам.


PS. Маленькая просьба: только пожалуйста, не надо меня учить "как делать", как это пытались делать лоровцы, а просто приведите рабочий скрипт.
Хотя я понимаю, что учить и тыкать в маны гораздо легче, но когда доходит до конкретики, так все разбегаются в разные стороны.



Содержание

Сообщения в этом обсуждении
"Два дня ЛОР героически сражался с Rsync..."
Отправлено олхнтп , 11-Дек-16 01:02 
>Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.

ну ты это пойди и расскажи авторам rsync-a

в --exclude пути всегда относительны base dir

rsync    -avpH      \
--exclude="/chukcha/.cache/mozilla/firefox/*"                    \
--exclude="/chukcha/.config/chromium/Default/*"                  \
--exclude="/chukcha/.cache/moonchild productions/pale moon/*"    \
/home   /mnt/sdc1/


"Два дня ЛОР героически сражался с Rsync..."
Отправлено chukcha , 11-Дек-16 01:16 
>>Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.
> ну ты это пойди и расскажи авторам rsync-a

Иными словами, ты хочешь сказать, что эта задача нерешаема? :-O


"Два дня ЛОР героически сражался с Rsync..."
Отправлено chukcha , 11-Дек-16 01:20 
> в --exclude пути всегда относительны base dir

Это я и без тебя знаю. Но возможно, есть другие решения, без использования параметра --exclude, а какого-то другого, подходящего под этот случай?

Например, лоровцы предлагали использовать 'filter' и даже привели готовый пример, но что-то у них с ним не сложилось, он тоже не заработал


"Два дня ЛОР героически сражался с Rsync..."
Отправлено олхнтп , 11-Дек-16 02:28 
> а какого-то другого, подходящего под этот случай?

я не в куГсе, когда есть задача - я её решаю, а не ставлю принципиальных вопросов,
ну вот на фига конкретно ставит такую задачу "только абсолютные пути" ??
"умный в гору не пойдёт" (с) народное
не умеет - ну и фиг с ним, всю жизнь писал и буду писать относительные пути в exclude

бери тектовый редактор и gcc в руки и правь сырцы rsync


"Два дня ЛОР героически сражался с Rsync..."
Отправлено freehck , 26-Янв-17 08:56 
deleted

"Два дня ЛОР героически сражался с Rsync..."
Отправлено Аноним , 11-Дек-16 06:24 
https://gist.github.com/typomedia/6484306

но там исключения отдельно вынесены


"Два дня ЛОР героически сражался с Rsync..."
Отправлено chukcha , 11-Дек-16 21:32 
Оказывается, всё-таки есть жизнь на Марсе! :) Спасибо за дельные советы!
Ну а те, кто первыми "высказался"... известно ведь, что  всегда наверху плавает.

Итак:

> https://gist.github.com/typomedia/6484306
> но там исключения отдельно вынесены

Посмотрел, спасибо. Интересное, хотя для моего юзерского понимания сложноватое решение, но возможно, придется к нему вернуться.


cat orig_exclude.txt| sed 's/^\/home//'>new_exclude.txt 
rsync    -avpH --exclude-from=new_exclude.txt /home   /mnt/sdc1/

> Второй вариант указать в качестве исходного пути "/" и добавить маски  
> "+ /home/" и "- *" в список исключений, при которых несмотря
> на указания пути "/" копироваться будет только /home.

Еще одно любопытное решение, спасибо. Как для меня, сложноватое решение, но тем не менее, дающее шанс, если ничего другое не сработает.

--------

А пока просьба рассмотреть решение, которое предложил один из лоровцев.
Оно привлекло меня  свое исключительной простотой.
К сожалению, у лоровца оказались сильно испорченые нервы, не долечился, видимо, и диалог прервался на самом интересном месте из-за его хамства.

Вот что он предложил:

rsync    -avpH      \
--filter="-/ /home/chukcha/.config/chromium/Default"                  \
--filter="-/ /home/chukcha/.cache/mozilla/firefox"                    \
--filter="-/ /home/chukcha/.cache/moonchild productions/pale moon"    \
/home   /mnt/sdc1/


Его автор категорически убежден, что это работает, и привел различные хитрые доказательства.
Доказательства доказательствами, но к сожалению, сколько не бился с этом скриптом, но у меня оно не заработало.

Проверял его очень просто: запустил этот скрипт и наблюдал, что копируется, а что нет.
Оказалось, что копируется всё (разумеется, за исключением ранее скопированного), но к сожалению, корируется также и то, что содержится в строках исключения, а такого, конечно,  не должно быть.

Что я делаю не так - ума не приложу. Или все-таки это решение неправильное?


"Два дня ЛОР героически сражался с Rsync..."
Отправлено Freddy Cuper , 11-Дек-16 08:36 
rsync обрабатывает маски относительно корня копирования, поэтому самым простым выходом будет запись списка исключения в файл и использование простого скрипта, который вырежет корень из имён путей в этом списке, а потом запустит rsync с передачей изменённого набора правил директивой --exclude-from

типа
cat orig_exclude.txt| sed 's/^\/home//'>new_exclude.txt
rsync    -avpH --exclude-from=new_exclude.txt /home   /mnt/sdc1/

Второй вариант указать в качестве исходного пути "/" и добавить маски  "+ /home/" и "- *" в список исключений, при которых несмотря на указания пути "/" копироваться будет только /home.


"Два дня ЛОР героически сражался с Rsync..."
Отправлено chukcha , 11-Дек-16 23:09 
Оказывается, всё-таки есть жизнь на Марсе! :) Спасибо за дельные советы!
Ну а те, кто первыми "высказался"... известно ведь, что  всегда наверху плавает.

Итак:

> https://gist.github.com/typomedia/6484306
> но там исключения отдельно вынесены

Посмотрел, спасибо. Интересное, хотя для моего юзерского понимания сложноватое решение, но возможно, придется к нему вернуться.


cat orig_exclude.txt| sed 's/^\/home//'>new_exclude.txt 
rsync    -avpH --exclude-from=new_exclude.txt /home   /mnt/sdc1/


> Второй вариант указать в качестве исходного пути "/" и добавить маски  
> "+ /home/" и "- *" в список исключений, при которых несмотря
> на указания пути "/" копироваться будет только /home.

Еще одно любопытное решение, спасибо. Как для меня, сложноватое решение, но тем не менее, дающее шанс, если ничего другое не сработает.

--------

А пока просьба рассмотреть решение, которое предложил один из лоровцев.
Оно привлекло меня  свое исключительной простотой.
К сожалению, у лоровца оказались сильно испорченые нервы, не долечился, видимо, и диалог прервался на самом интересном месте из-за его хамства.

Вот что он предложил:

rsync    -avpH      \
--filter="-/ /home/chukcha/.config/chromium/Default"                  \
--filter="-/ /home/chukcha/.cache/mozilla/firefox"                    \
--filter="-/ /home/chukcha/.cache/moonchild productions/pale moon"    \
/home   /mnt/sdc1/


Его автор категорически убежден, что это работает, и привел различные хитрые доказательства.
Доказательства доказательствами, но к сожалению, сколько не бился с этом скриптом, но у меня оно не заработало.

Проверял его очень просто: запустил этот скрипт и наблюдал, что копируется, а что нет.
Оказалось, что копируется всё (разумеется, за исключением ранее скопированного), но к сожалению, корируется также и то, что содержится в строках исключения, а такого, конечно,  не должно быть.

Что я делаю не так - ума не приложу. Или все-таки это решение неправильное?


"Два дня ЛОР героически сражался с Rsync..."
Отправлено universite , 12-Дек-16 00:03 
> Оказывается, всё-таки есть жизнь на Марсе! :) Спасибо за дельные советы!
> Ну а те, кто первыми "высказался"... известно ведь, что  всегда наверху
> плавает.

Мальчик. Не хами тут. Тебя и прокси не спасет.
Внемли умные мысли старожилов форума.


"Два дня ЛОР героически сражался с Rsync..."
Отправлено Andrey Mitrofanov , 15-Дек-16 12:28 
> А чего тут делиться? Спросите у тех двух супер-знатоков, что обгадили тему.

Млицыя!! Караул!1  Невинность провокатора флейма оскорблена.  Всех расстрелять.

> Они-то наверняка всё знают и поучают всех, что и как надо делать,
> а я так, просто ламерок неграмотный.