Используйте rsync для копирования всех файлов, кроме определенных имен файлов с определенным расширением

28

У меня есть две флэш-карты одинакового размера, и я хочу скопировать содержимое одной на другую на основе следующих правил:

  1. Я хочу, чтобы все каталоги и подкаталоги были на месте
  2. Я хочу исключить файлы типа .FOO, .BAR и .ZIM (все остальные файлы копируются)
  3. Бонус: было бы здорово, если бы он выводил имена файлов по мере их копирования, учитывая, что он будет копировать ~ 8 ГБ информации

Можно ли это как-то сделать с помощью команды «найти»?

Мацек
источник

Ответы:

41

Это было бы значительно проще, если использовать rsync с его --excludeпереключателем.

rsync -av --exclude='*.FOO' --exclude='*.BAR' --exclude='*.ZIM' /source /dest

-vКоммутатор обеспечит подробный вывод , на котором синхронизируются файлы.

Джон Т
источник
Небольшое продолжение: копирование завершено, и / src / * теперь находится в / dest / src / * Как использовать rsync для получения / src / * в / dest / *?
macek
Попробуйте/source/ /dest
Джон Т
Это не работает Я все еще вижу, как копируются файлы * .FOO.
Джейк
Указывается, как вы должны указать путь --exclude. Если у вас есть проблемы с этим, проверьте этот ответ .
тотемедли
0

Если у вас есть большое количество исключаемых расширений, вы можете создать файл и записать все расширения или файлы, которые нужно исключить, и использовать только один параметр исключения, чтобы упростить его.

rsync -ravz --exclude = '. / abc, txt' / source / dest

Всегда полезно использовать z для сжатия и параметр r, если вам нужно копировать рекурсивно.

Amit Singh
источник