Назад | Перейти на главную страницу

Как выполнить синхронизацию всей папки на основе наличия в этой папке определенного типа файла

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