У меня есть настроенный сервер, который получает фильмы в папку. Затем я показываю эти фильмы по DLNA. Но в исходной папке, куда они попадают, попадают всевозможные файлы. Изображения, музыка, документы и т. Д. Я подумал, что исправлю это, запустив следующий скрипт внутри этой папки
rsync -rvt --include = '* /' --include = '*. avi' --include = '*. mkv' --exclude = '*'. ../Фильмы/
Это работает, сканирует данную папку и перемещает все найденные фильмы с заданными типами расширений в папку Movies
папка.
Но мне интересно, есть ли способ сообщить rsync if a folder if found that includes a movie of the given extension types, sync the entire folder. Including other files such as .srt
. Это сделано для того, чтобы мне было легче перемещать субтитры вместе с фильмом.
У меня есть решение, придуманное с помощью сценария, созданного на php (да, я действительно делаю большую часть своих сценариев в Linux, используя php ... просто привычка, которая застряла давным-давно). Но если бы rsync справился с этим с самого начала, это было бы супер.
Кроме того, я заметил, что эта строка rsync фактически копирует все корневые папки в данной папке. Если в папке нет фильма, будет создана пустая папка. Как мне запретить rsync делать это ... и избавить меня от проблемы удаления всей папки в Movies
которые пусты.
Не очень хорошо, но в итоге я использовал параметр rsync, а затем запустил find -type d -empty -delete
чтобы избавиться от всех пустых папок
Почему бы вам не синхронизировать все, не только фильмы (*). Если все данные синхронизированы - rsync ничего не сделает, если появятся какие-то новые файлы (например, субтитры или фильмы) - они будут синхронизированы
Следуя приведенным выше примерам пути с исходными файлами, находящимися в "." и вы хотите, чтобы они были скопированы в "../Movies":
if [ `find . -name \*.avi | wc -l` -gt 1 ]; then rsync ./ ../Movies/; fi
Я абсолютно уверен, что вам нужно использовать какой-то внешний скрипт, обернутый вокруг rsync, чтобы это произошло. Таким образом, окончательный ответ на ваш вопрос - сжатое «Нет».