Как я могу 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. Таким образом, окончательный ответ на ваш вопрос является кратким, "Нет".