Что ни говори, а все-таки по сети нет-нет, да и приходится взаимодействовать с компьютерами под управлением Windows. Некоторое время назад, я установил себе мультимедиаплеер с поддержкой WiFi и с встроенным диском на два терабайта. В общем, вздумалось мне, что негоже прозябать такому вместительному хранилищу и решил слить туда медиафайлы с остальных компов, а в дальнейшем периодически синхронизировать медиаданные между компами и плеером. В самом девайсе зашито ядро драгоценного Linux, но к сети он подключается под виндовым протоколом через samba. Соответственно для нормальной работы с устройством (я говорю именно про нормальную работу, т. е. не через GUI и всякие копи-пасты..), для начала необходимо примонтировать диск плеера в какой-нибудь локальный каталог. Делается это следующей строкой:
sudo mount -t cifs -o iocharset=utf8,file_mode=0777,dir_mode=0777,uid=1000 //192.168.1.34/ScreenPlay ~/Share
где:
uid=1000 - это uid пользователя с правами которого нужно примонтировать диск (по умолчанию, если не указать нужный uid, все права на файлы и директории будут принадлежать пользователю root, так-как сама команда выполнялась от суперпользователя, через sudo).
//192.168.1.34/ScreenPlay - это сетевой ip адрес устройства и каталога, который станем монтировать.
~/Share - это предварительно созданный каталог куда хотим монтировать своё устройство.
Опции iocharset=utf8, file_mode=0777, dir_mode=0777 (в строке идут через запятую, без пробелов) говорят сами за себя - это кодировка ( utf8 ) и права на файлы и папки ( 0777 ).
rsync -avn /home/barbar/Media/ /home/barbar/Share/RemoteMedia/ (опция -n позволяет увидеть предстоящие изменения, без запуска самой синхронизации)
rsync -av /home/barbar/Media/ /home/barbar/Share/RemoteMedia/ (запуск синхронизации)
Команда rsync имеет полезную опцию –progress, устанавливая её вы сможете наблюдать за процессом происходящего. Это весьма полезно при синхронизации больших файлов, когда может показаться, что команда «зависла», а учитывая, что при синхронизации с удаленным диском, могут возникать обрывы сети и прочие непредвиденные ситуации, наблюдение за прогрессом оказывается отнюдь не лишним. Однако, команду rsync, часто запускают в фоновом режиме, и тогда следить за статусом выполнения становится неудобно. В этом случае, можно периодически, в целевой папке, куда пишем информацию, запускать что-нибудь на подобии:
ls -la .?*? | cut -d\ -f5
Обратите внимание, что регулярное выражение {.?*?} подходит для слежения за обычными файлами, имена которых не начинаются с точки. В иных случаях регулярные выражения, можно составлять исходя из ситуации. Например, для слежения за видео файлами с расширением «avi» можно использовать следующее выражение в строке:
ls -la .?*.avi.* | cut -d\ -f5
Так-как формат временного названия синхронизируемого файла, rsync генерирует по шаблону типа - «.00017.avi.zZIAQP», т. е. добавляет точку перед названием и в конце, а затем добивает рендомным буквосочетанием из 6-ти произвольных символов, то выражение «.?*.avi.*» вполне подойдет для того, чтобы команда ls -ls выдала нам информацию именно о том файле, который находится в процессе синхронизации. Далее, после знака вертикальной черты («|» - конвеер) мы передаём найденную строку команде cut, которая получая данные о нужно поле (в данном случае, мне интересен лишь размер обрабатываемого файла, если он меняется, то все нормально — синхронизация в процессе работы), через опции - «-d\ » (d — делиметр, а «\ » - обозначение пробела, (который мы передавая как разделитель строки, должны предварять (экранировать) обратным слэшем, иначе пробел будет воспринят как служебный символ и команда его просто не воспримет, выдав сообщение типа - «cut: разделитель должен быть одним символом…») т.е. мы сообщаем, что поля в строке разделены символом «пробел») и опцию «-f5» (пятое поле полученной строки) выдает нам размер обрабатываемого файла.