Как я могу скопировать подмножество файлов из каталога, сохранив при этом структуру папок?

8

Я хочу переместить некоторое подмножество файлов из dirA в dirB (скажем, файлы с именем «blah» в имени файла), но я хочу, чтобы все вложенные каталоги были одинаковыми в новом месте. Как я могу это сделать?

cstack
источник
возможный дубликат фильтра Rsync: копирование только одного паттерна
Жиль "ТАК, перестань быть злым"

Ответы:

9

Магия rsyncправил фильтрации:

$ rsync -av --filter="+ */" --filter="-! *blah*" /source /dest

Обратитесь к rsyncстранице справочника за подробной информацией о правилах фильтрации, но вот сокращенная версия для этой конкретной потребности.

--filter="+ */" означает «включить все, что является каталогом»

--filter="-! *blah* означает «исключить все, что не включает бла в имени файла»

п.д.о.
источник
3

Если вам нужно скопировать эти файлы, cp сделает:

cd dirA
find . -iname "*blah*" | xargs -If cp --parents f dirB

Опция --parentsсохраняет подкаталоги - она ​​создает полный путь к каталогу для места назначения.

Джоанна Котула
источник
синтаксис здесь намного яснее, чем rsync
Матей Шмид
0

Это сработало для меня:

rsync -ave 'ssh -p 22' --filter="+ */" --exclude="*_blah.blah" uid@555.55.555.55:/source/directory/ /destination/directory/

В -eкоммутаторе определяет rsyncпротокол передачи с портом в качестве -p 22. Кроме того, конечные /слэши важны, чтобы программа знала, что имеет дело с каталогами.

Спасибо @pdo за дополнительные часы в мой рабочий день!

Камбиз
источник