Как я могу rsync всю папку на основе наличия определенного типа файла в этой папке

У меня настроен сервер, который получает фильмы в папку. Затем я подаю эти фильмы, используя 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 которые пусты.

4 ответа

Решение

Не приятно, но в итоге я использовал опцию rsync и затем запустил find -type d -empty -delete избавиться от всех пустых папок

Почему бы вам не синхронизировать все не только фильмы (*) . Если все данные синхронизированы - rsync ничего не сделает, если появятся новые файлы (например, субтитры или фильмы) - они будут синхронизированы

Следуя приведенным выше примерам, исходные файлы находятся в "." и вы хотите, чтобы они были скопированы в "../Movies":

if [ `find . -name \*.avi | wc -l` -gt 1 ]; then rsync ./ ../Movies/; fi

Я очень уверен, что для этого нужно использовать какой-то внешний скрипт, обернутый вокруг rsync. Таким образом, окончательный ответ на ваш вопрос является кратким, "Нет".

Другие вопросы по тегам