LINUX.ORG.RU

Нюансы синтаксиса Rsync

 


0

3

Пытаюсь исключить из резервного копирования некоторые незначащие папки -

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


но Rsync не обращает на эти исключения никакого внимания и все равно их копирует.

Как ему это объяснить?

★★★★★

Ответ на: комментарий от ism

Ок, попробовал добавить слеш -

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

но увы, те же яйца :(

chukcha ★★★★★
() автор топика
Ответ на: комментарий от Stanson

По две звездочки этот так?

rsync    -avpH      \
--exclude="/home/chukcha/.cache/moonchild productions/pale moon/**"    \
/home   /mnt/sdc1/
- не помогает.

Про ман лучше не надо, битый час изучал, и все равно синтаскис для меня все равно непонятен.

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

chukcha ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Извините, но так до бесконечности можно гадать, что я до этого и делал.

Рабочий пример кто-то может привести?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от ArcFi

Спасибо, ArcFi :)

Только ты мог бы еще продемонстрировать то же самое, но только для этой конкретной строки?

--exclude="/home/chukcha/.cache/moonchild productions/pale moon/*"

chukcha ★★★★★
() автор топика
Ответ на: комментарий от paran0id

Да зачем мне еще куда-то глядеть? У меня есть конкретная задача, привел для нее конкретную строку, и где-то в ней есть ошибка.

И что, никто из ЛОРа не в состоянии ее найти и показать, как надо сделать?? Не думаю, скорее всего настоящие знатоки уже спят, остались такие же чукчи, как я.

А ваши бекап-программы я уже видел. Более того, долгое время использовал rsnapshot, но сейчас решил вернуться на простой Rsync, он для меня удобнее.

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 3)
Ответ на: комментарий от ArcFi

Увы, и это не работает. Я уже совсем загрустил..... неужто в такой постановке задача вообще не решается?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от ArcFi

Но это же будет совсем не то копирование, что было.

Конечно, я попробровал добавить, но Rsync начал копировать все подряд, не обращая внимания на уже скопированые файлы.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Пока на всякий случай поясню свое, казалось бы странное решение:

но сейчас решил вернуться на простой Rsync, он для меня удобнее.

Да, долго пользовался Rsnapshot, классная утилита, но в ней есть огромный недостаток - она копирует «втёмную», и непонятно, что она скопировала.
А RSync показывает, что скопировал, что удалил, и этот контроль для меня очень важен.

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Rsync начал копировать все подряд, не обращая внимания на уже скопированые файлы

Добавьте название каталога источника суффиксом к каталогу назначения и слеш в конце.

ArcFi
()
Ответ на: комментарий от ArcFi

Добавьте название каталога источника суффиксом к каталогу назначения и слеш в конце.

Непонятно. Можно в виде моей конкретной строки? ;)

chukcha ★★★★★
() автор топика
Ответ на: комментарий от ArcFi

Копировать всё подряд перестало, значит, увидело ранее скопированные файлы.
Но все равно также копирует ту же галиматью, что и раньше, т.е. не обращает никакого внимания на --exclude

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Вот, пример, максимально близкий к вашему:

$ rsync -nav /home/ /mnt/sdc1/home/ 2>&1 | grep -E "(Документы|Загрузки)/$"
arcfi/Документы/
arcfi/Загрузки/

$ rsync -nav /home/ /mnt/sdc1/home/ --exclude="/$USER/Загрузки/" 2>&1 | grep -E "(Документы|Загрузки)/$"
arcfi/Документы/

Всё работает.

ArcFi
()
Ответ на: комментарий от ArcFi

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

chukcha ★★★★★
() автор топика
Ответ на: комментарий от ArcFi

Да пожалуйста, хотя в точности выполнял ваши советы.
Вот последний:

rsync -n   -avpH   \
--exclude="/chukcha/.cache/mozilla/firefox/" \
/home/  /mnt/sdc1/home/

chukcha ★★★★★
() автор топика

Попробуйте так.

rsync -aAXv --progress --delete-excluded --delete \
    --exclude='/.config/chromium/Default/*' \
    --exclude='/.cache/mozilla/firefox/*' \
    --exclude='/.cache/moonchild productions/pale moon/*' \
    /home/chukcha/ /run/sdc1/chukcha/

shnnmnn
()
Ответ на: комментарий от shnnmnn

Спасибо, попробую уже завтра ;)

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Скопипастил вашу команду в терминал, заменив имя юзера и добавив grep для проверки:

$ rsync -n   -avpH   --exclude="/arcfi/.cache/mozilla/firefox/" /home/  /mnt/sdc1/home/ \
2>&1 | grep "cache/mozilla"
arcfi/.cache/mozilla/

Подкаталог firefox есть в источнике, но grep его не видит, значит всё работает правильно.

ArcFi
()
rsync -axv --delete-after \
	--exclude .cache \
	--exclude .thumbnails \
	--exclude .dc++ \
	--exclude .gvfs \
	--exclude tmp \
	--exclude Отстойник \
	--exclude Downloads \
	/home/dimss/ $BV/dimss

Deleted
()
Ответ на: комментарий от chukcha

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

Можете привести такой?

Легко:

$ ls -laR tmp1
tmp1:
total 12
drwxr-xr-x 3 stanson users 4096 Dec  9 13:12 ./
drwxr-xr-x 7 stanson users 4096 Dec  9 13:12 ../
drwxr-xr-x 3 stanson users 4096 Dec  9 13:13 .test/
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file1
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file2
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file3

tmp1/.test:
total 12
drwxr-xr-x 3 stanson users 4096 Dec  9 13:13 ./
drwxr-xr-x 3 stanson users 4096 Dec  9 13:12 ../
-rw-r--r-- 1 stanson users    0 Dec  9 13:13 test1
-rw-r--r-- 1 stanson users    0 Dec  9 13:13 test2
-rw-r--r-- 1 stanson users    0 Dec  9 13:13 test3
drwxr-xr-x 2 stanson users 4096 Dec  9 13:13 test_dir/

tmp1/.test/test_dir:
total 8
drwxr-xr-x 2 stanson users 4096 Dec  9 13:13 ./
drwxr-xr-x 3 stanson users 4096 Dec  9 13:13 ../
-rw-r--r-- 1 stanson users    0 Dec  9 13:13 file1
-rw-r--r-- 1 stanson users    0 Dec  9 13:13 file2
-rw-r--r-- 1 stanson users    0 Dec  9 13:13 file3

$ ls -laR tmp2
tmp2:
total 8
drwxr-xr-x 2 stanson users 4096 Dec  9 13:20 ./
drwxr-xr-x 7 stanson users 4096 Dec  9 13:12 ../

делаем rsync

$ rsync -avH --exclude=".test/***" tmp1/ tmp2/ 
sending incremental file list
./
file1
file2
file3

sent 229 bytes  received 80 bytes  618.00 bytes/sec
total size is 0  speedup is 0.00
$ ls -laR tmp2
tmp2:
total 8
drwxr-xr-x 2 stanson users 4096 Dec  9 13:12 ./
drwxr-xr-x 7 stanson users 4096 Dec  9 13:12 ../
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file1
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file2
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file3

С двумя звёздами:

$ rsync -avH --exclude=".test/**" tmp1/ tmp2/
sending incremental file list
./
file1
file2
file3
.test/

sent 268 bytes  received 84 bytes  704.00 bytes/sec
total size is 0  speedup is 0.00
tmp2:
total 12
drwxr-xr-x 3 stanson users 4096 Dec  9 13:12 ./
drwxr-xr-x 7 stanson users 4096 Dec  9 13:12 ../
drwxr-xr-x 2 stanson users 4096 Dec  9 13:13 .test/
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file1
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file2
-rw-r--r-- 1 stanson users    0 Dec  9 13:12 file3

tmp2/.test:
total 8
drwxr-xr-x 2 stanson users 4096 Dec  9 13:13 ./
drwxr-xr-x 3 stanson users 4096 Dec  9 13:12 ../

Все exclude паттерны относительны. Если добавить / в начале паттерна exclude, то паттерн будет работать только для tmp/.test, а не для любых директорий .test встретившихся в глубине tmp/

Про ман лучше не надо, битый час изучал, и все равно синтаскис для меня все равно непонятен.

Значит сиди на венде.

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 2)

1. * в конце не нужны, но и с ними должно работать

2. с пробелами нужно что-то делать, скорее всего «\ »

anonymous
()

--exclude=«/chukcha/...

anonymous
()
Ответ на: комментарий от chukcha

Да, долго пользовался Rsnapshot, классная утилита, но в ней есть огромный недостаток - она копирует «втёмную», и непонятно, что она скопировала.
А RSync показывает, что скопировал, что удалил, и этот контроль для меня очень важен.

rsnapshot(1) — это обертка над rsync’ом. Все, что умеет rsync(1), она умеет тоже.

Если вы имеете в виду --progress, то его и допишите в rsync_long_args.

Zmicier ★★★★★
()

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

Эм...

$ man rsnapshot | grep -EA4 '^ *(verbose|loglevel)'
           verbose             2

               The amount of information to print out when the program is run.
               Allowed values are 1 through 5. The default is 2.

--
           loglevel            3

               This number means the same thing as verbose above, but it
               determines how much data is written to the logfile, if one is
               being written.

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

ArcFi
()
Ответ на: комментарий от Stanson

Можете привести такой?
Легко:

и т.д.

Господа, которые привели подобные примеры:

rsync -axv --delete-after \
	--exclude .cache \
	--exclude .thumbnails \
	--exclude .dc++ \
	--exclude .gvfs \
	--exclude tmp \
	--exclude Отстойник \
	--exclude Downloads \
	/home/dimss/ $BV/dimss 
вы меня не поняли.

Мне нужно, чтобы исключение работало не для относительных путей папок, а для АБСОЛЮТНЫХ.
Поскольку мне требуется, например, чтобы для одного пути папка Downloads исключалась и не копировалась, а для другого - наоборот, копировалась.
А в ваших примерах исключение будет работать для всех папок с именами 'Download', а это совсем не то, что нужно.

Поэтому каждый раз привожу одну и ту же строку:
--exclude="home/chukcha/.cache/mozilla/firefox/*" 
где требуется исключение для всех папок, которые ниже /firefox/
но который, к сожалению, не работает и прошу его подправить.

Кажется, уже совсем понятно объяснил? :)

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

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

ArcFi
()
Ответ на: комментарий от ArcFi

Ясное дело, что не понимаю, иначе бы не спрашивал.
Но раз вы понимаете, так и покажите на моей строке, как должно быть правильно, чтобы исключение работало для конкретной папки и ниже её.

chukcha ★★★★★
() автор топика
rsync -avvP -e ssh --exclude 'local.staff' --delete /home/distr/ root@host26:/home/distr/ | grep -v uptodate

норм работает

targitaj ★★★★★
()
Ответ на: комментарий от ArcFi

Вот это у вас что выводит?

rsync -n -avpH \
--exclude=«/chukcha/.cache/mozilla/firefox/» \
/home/ /mnt/sdc1/home/ \
2>&1 | grep «cache/mozilla»

- похоже, ничего не выводит


rsync -avvP -e ssh --exclude 'local.staff' --delete /home/distr/ root@host26:/home/distr/ | grep -v uptodate

норм работает

Извините, это в вашей строке работает, но у меня совсем другая ведь

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Проверил

Аналогичная команда создает папку в цели /home/chukcha/.cache/mozilla/firefox/, но ничего туда не копирует, хотя в исходной есть

Может у вас в путях управляющие символы есть ?

ism ★★★
()
Ответ на: комментарий от ism

Проверил
Аналогичная команда создает папку в цели /home/chukcha/.cache/mozilla/firefox/, но ничего туда не копирует, хотя в исходной есть
Может у вас в путях управляющие символы есть ?

Проверили - что? Аналогичная - это какая?
А вот в путях ничего крамольного нет, все чисто.

--prune-empty-dirs

Это кому-куда-зачем? Забыли написать что оно даст

chukcha ★★★★★
() автор топика
Ответ на: комментарий от shnnmnn

Опаньки - кажется, я пропустил этот вчерашний совет -

rsync -aAXv --progress --delete-excluded --delete \
    --exclude='/.config/chromium/Default/*' \
    --exclude='/.cache/mozilla/firefox/*' \
    --exclude='/.cache/moonchild productions/pale moon/*' \
    /home/chukcha/ /run/sdc1/chukcha/
Сейчас испробую :)


- Испробовал. Конечно, ошибочный путь /run/ в таргете исключил.

Но - нет, не взлетело. Более того - начало тупо копировать всё подряд, невзирая на уже скопированный контент.

chukcha ★★★★★
() автор топика
Последнее исправление: chukcha (всего исправлений: 1)
Ответ на: комментарий от chukcha

/.config/chromium этим вы говорите что в папка в корне, а это не так

Тогда уж ./.config/chromium, ето знак текущей папки

ism ★★★
()

так проще

--exclude-from="/root/exclude.txt"

int13h ★★★★★
()

а их случаем не из файла исключений синк читаешь?

darkenshvein ★★★★★
()
Ответ на: комментарий от ism

/.config/chromium этим вы говорите что в папка в корне, а это не так
Тогда уж ./.config/chromium, ето знак текущей папки

Ну, это же ваш рецепт был. Хорошо, а что значит «текущей папки»?
Я вообще не знаю, откуда буду запускать свой скрипт из /home, /root, /usr/bin или вообще по крону.
И тогда как?


так проще
--exclude-from=«/root/exclude.txt»

И что с ним сделать - в рамочку и на стенку?

chukcha ★★★★★
() автор топика
Ответ на: комментарий от chukcha

Кажется уже порекомендовали таки прочитать man rsync и таки увидеть, что в exclude паттернах указываются пути только относительно источника. Не может быть АБСОЛЮТНЫХ путей в паттернах exclude, ибо в этом нет никакого смысла.

Stanson ★★★★★
()
Ответ на: комментарий от chukcha

Но раз вы понимаете, так и покажите на моей строке, как должно быть правильно, чтобы исключение работало для конкретной папки и ниже её.

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

Это что, так трудно таки сделать как говорят, или тебе нужен свой rsync с блекджеком и шлюхами чтобы АБСОЛЮТНЫЕ пути можно было в exckude указывать?

Stanson ★★★★★
()
Ответ на: комментарий от chukcha

Мне нужно, чтобы исключение работало не для относительных путей папок, а для АБСОЛЮТНЫХ.

Если тебе позарез таки нужно именно АБСОЛЮТНЫЕ пути запретить, то тогда тебе совсем не exclude нужно, а filter

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/
Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 3)
Ответ на: комментарий от Stanson

Это что, так трудно таки сделать как говорят, или тебе нужен свой rsync с блекджеком и шлюхами чтобы АБСОЛЮТНЫЕ пути можно было в exckude указывать?


Не трудно, но я уже писал об этом - не работает ни с одной, ни с двумя, ни с тремя звездочками.
Может, с четырьма попробовать? :)

А с «filter» сейчас испробую.

chukcha ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.