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

30448
macek

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

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

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

20

2 ответа на вопрос

32
John T

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

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

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

Небольшое продолжение: копирование завершено, и / src / * теперь находится в / dest / src / * Как использовать rsync для получения / src / * в / dest / *? macek 14 лет назад 0
Попробуйте `/ source / / dest` John T 14 лет назад 0
Это не работает Я все еще вижу, как копируются файлы * .FOO. Jake 7 лет назад 0
Указывается, как вы должны указать путь для `--exclude`. Если у вас есть проблемы с этим, [проверьте этот ответ] (https://unix.stackexchange.com/a/83403/136348). totymedli 6 лет назад 0
0
amit singh

If you have large number of extensions to exclude you can make a file and write down all the extension or file to exclude and use only one exclude option to make it simple.

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

It is always good to use z for compression and r option if you have to copy recursively.