Каков наилучший способ сравнения двух структур каталогов и удаления посторонних файлов и каталогов в целевом местоположении?
У меня есть небольшое приложение для создания веб-галереи фотографий, которое я разрабатываю. Пользователи добавляют и удаляют изображения, используя FTP. Программное обеспечение для веб-галереи, которое я написал, создает новые эскизы на лету, но не занимается удалением. Что я хотел бы сделать, так это запланировать выполнение командного / bash-скрипта через определенные промежутки времени.
Исходные изображения хранятся /home/gallery/images/
и упорядочиваются по альбомам с использованием подкаталогов. Миниатюры кэшируются /home/gallery/thumbs/
, используя ту же структуру каталогов и имена файлов, что и каталог изображений.
Я попытался использовать следующее для достижения этой цели:
rsync -r --delete --ignore-existing /home/gallery/images /home/gallery/thumbs
это будет работать нормально, если все миниатюры уже были кэшированы, но нет никакой гарантии, что это произойдет, когда в этом случае в каталоге большого пальца будут скопированы оригинальные полноразмерные изображения.
Как мне лучше всего добиться того, что я пытаюсь сделать?
rmdir
?find
и в[
тесте]
. Конечно, пожалуйста, будьте очень осторожны как с командой, которую я дал вам, так и с любыми изменениями, и тщательно протестируйтеecho
!Тебе
--existing
тоже нужно :Из справочной страницы:
источник
--ignore-errors
аргумент. Это единственное, что сработало для меня. Спасибо за--existing
и--ignore-existing
! Я использовал ваш ответ в качестве основы моего ответа здесь .rm
,cp
или ониmv
будут работать так, как и есть: это проблемы, на которые следует обратить внимание и которые мешают успешному завершению операций. Вы можете указать большинству инструментов игнорировать ошибки (например,-f
дляrm
), но я не понимаю, насколько это актуально для вопроса или этого ответа.