Понадобилось решить, казалось бы, очень простую задачу - осуществить резервное копирование с диска на диск,
исключив из него папки и файлы, лежащие ниже некоторых задаваемых папок.
Причем, обязательное условие - эти папки должны задаваться АБСОЛЮТНЫМИ путями.
Первым делом быстренько накидал свой вариант
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-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-aИными словами, ты хочешь сказать, что эта задача нерешаема? :-O
> в --exclude пути всегда относительны base dirЭто я и без тебя знаю. Но возможно, есть другие решения, без использования параметра --exclude, а какого-то другого, подходящего под этот случай?
Например, лоровцы предлагали использовать 'filter' и даже привели готовый пример, но что-то у них с ним не сложилось, он тоже не заработал
> а какого-то другого, подходящего под этот случай?я не в куГсе, когда есть задача - я её решаю, а не ставлю принципиальных вопросов,
ну вот на фига конкретно ставит такую задачу "только абсолютные пути" ??
"умный в гору не пойдёт" (с) народное
не умеет - ну и фиг с ним, всю жизнь писал и буду писать относительные пути в excludeбери тектовый редактор и gcc в руки и правь сырцы rsync
deleted
https://gist.github.com/typomedia/6484306но там исключения отдельно вынесены
Оказывается, всё-таки есть жизнь на Марсе! :) Спасибо за дельные советы!
Ну а те, кто первыми "высказался"... известно ведь, что всегда наверху плавает.Итак:
> 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 обрабатывает маски относительно корня копирования, поэтому самым простым выходом будет запись списка исключения в файл и использование простого скрипта, который вырежет корень из имён путей в этом списке, а потом запустит 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.
Оказывается, всё-таки есть жизнь на Марсе! :) Спасибо за дельные советы!
Ну а те, кто первыми "высказался"... известно ведь, что всегда наверху плавает.Итак:
> 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/
Его автор категорически убежден, что это работает, и привел различные хитрые доказательства.
Доказательства доказательствами, но к сожалению, сколько не бился с этом скриптом, но у меня оно не заработало.Проверял его очень просто: запустил этот скрипт и наблюдал, что копируется, а что нет.
Оказалось, что копируется всё (разумеется, за исключением ранее скопированного), но к сожалению, корируется также и то, что содержится в строках исключения, а такого, конечно, не должно быть.Что я делаю не так - ума не приложу. Или все-таки это решение неправильное?
> Оказывается, всё-таки есть жизнь на Марсе! :) Спасибо за дельные советы!
> Ну а те, кто первыми "высказался"... известно ведь, что всегда наверху
> плавает.Мальчик. Не хами тут. Тебя и прокси не спасет.
Внемли умные мысли старожилов форума.
> А чего тут делиться? Спросите у тех двух супер-знатоков, что обгадили тему.Млицыя!! Караул!1 Невинность провокатора флейма оскорблена. Всех расстрелять.
> Они-то наверняка всё знают и поучают всех, что и как надо делать,
> а я так, просто ламерок неграмотный.