удалить посторонние файлы из dest dir через rsync?

<p>скажи у меня</p><pre><code>src 001.jpg 002.jpg 001.txt a.zip dest hello.jpg </code></pre><p><code>rsync -d --delete src:{*.jpg,*.txt} dest</code></p><p>это не удаляет hello.jpg из dest, есть идеи, как заархивировать это?</p>

<p>причина, по которой ваша команда не работает, объясняется <a href="http://manpages.ubuntu.com/manpages/maverick/en/man1/rsync.1.html">страница справочника по rsync</a> (выделение добавлено):</p><blockquote> <p>--удалять</p> <p>это говорит rsync об удалении посторонних файлов с принимающей стороны (тех, которые не на отправляющей стороне), но только для каталогов, которые синхронизируются. <strong> вы должны были попросить rsync отправить весь каталог (например, "dir" или "dir /") без использования подстановочного знака для содержимого каталога (например, "dir/*"), поскольку подстановочный знак является расширяется оболочкой, и rsync получает запрос на передачу отдельных файлов, а не родительского каталога файлов. </strong> файлы, исключенные из передачи, также исключаются из удаления, если вы не используете - опцию delete-exclude или помечать правила как совпадающие только на отправляющей стороне (см. модификаторы include/exclude в разделе filter rules).</p> </blockquote><p>таким образом, когда вы бежите</p><pre><code>$ rsync -d --delete src:{*.jpg,*.txt} dest </code></pre><p>нежелательные файлы в dest не удаляются, потому что вы на самом деле не просили каталог для синхронизации, а просто несколько определенных файлов. чтобы получить желаемые результаты, попробуйте что-то вроде этого:</p><pre><code>rsync -d --delete-excluded --include '*.jpg' --include '*.txt' --exclude '*' src/ dest/ </code></pre><p>обратите внимание, что порядок директив include и exclude имеет значение. по сути, каждый файл проверяется на соответствие шаблонам включения или исключения в порядке их появления. таким образом, файлы с расширениями .jpg или .txt синхронизируются, поскольку они соответствуют шаблонам "включенных" до того, как они соответствуют исключенному шаблону "*". все остальное исключено <code>--exclude '*'</code> шаблон. <code>--delete-excluded</code> опция гарантирует, что даже исключенные файлы на стороне dest будут удалены.</p>