rsync
- Resume a partially copied file -
rsync -a --append source-file destination
rsync –exclude
Конкретные файлы
rsync -avz --exclude=f1.txt --exclude=d1/d2/f4.txt source/ destination
Одна опция exclude, но список исключенного
rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/
По маске (может совпадать и с именем, и с путём)
rsync -avz --exclude=*.txt source/ destination
Файлы в каталоге, но не каталог
rsync -a --exclude 'dir1/*' src_directory/ dst_directory/
По списку из файла
rsync -avrz --exclude-from=file-list.txt source/ destination
Уже совсем не exclude, но логика та ж.
По размеру:
rsync -avrz --max-size=1m source/ destination rsync -avrz --min-size=20k source/ destination
Хитрый финт ушами - тока jpg-файлы
It is little trickier to exclude all other files and directories except those that match a certain pattern. Let’s say you want to exclude all other files and directories except the files ending with .jpg.
One option is to use the following command:
rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/
When using multiple include/exclude option, the first matching rule applies.
–include='*.jpg' - First we are including all .jpg files. –include='*/' - Then we are including all directories inside the in src_directory directory. Without this rsync will only copy *.jpg files in the top level directory. -m - Removes the empty directories.
Another option would be to pipe the output of the find command to rsync:
find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
-printf %P\\0\\n - will remove the src_directory/ from the file path. –files-from=- - means include only the files from the standard input (files passed from the find command)
rsync для того, чтоб скопировать, потом удалить. Без сохранения прав
(с винды).
sudo rsync -rltvmh --progress --remove-source-files /media/lib/READ/filosofia/ /home/linukosha/lib/READ/filosofia/
Или вот так без виндов
rsync -vvzrc --progress --remove-source-files dir host:dir
- передать по ssh файлы из каталога на удалённый хост, удалить успешно перенесённое
rsync -av --delete -n --exclude=*~ --exclude=*#* --stats --progress --human-readable ~/Desktop/org ~/mnt/sdc1
Можно использовать –delete (удалить с цели отсутствующие файлы - то, что было удалено в источнике и отличается от –delete-excluded, когда удаляются ещё и исключённые из копирования с источника файлы).
rsync про каталоги
rsync /something here/ -a # создаст внутри here каталог something rsync /something/ here/ -a # поместит в каталог here содержимое каталога something
rm something
и rm something/
— это разные вещи. и не только в rm. cp, ls и rsync — тоже
Автовозобновление копирования rsync-ом
Иногда возникает необходимость перенести кучу файлов с сервера на сервер. Ну или скопировать из каталога в каталог. Многие используют для этого rsync. Но есть одно неприятное обстоятельство – если отвалится сеть – то процесс остановится и не продолжится. Хорошо бы, чтобы он перезапускался автоматически. Запускать в тупом цикле – некрасиво. Хочется, чтобы процесс перестал работать, когда каталоги синхронизируются.
В общем я решаю эту проблему примерно так:
false; while [ $? != 0 ]; do rsync -avz --progress /var/www root@remoteserver:/var/www && sleep 10; done
Процесс rsync будет перезапускаться, пока rsync не отдаст код 0 (означающий, что каталоги синхронизированы). В sleep указываем через сколько секунд (минут, часов) перезапускать. Запускать лучше, как обычно, в tmux или screen.