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


8

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


Ответы:


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 за дополнительные часы в мой рабочий день!

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.