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

У меня есть каталог с множеством файлов заголовков (.h), других файлов .o и .c и других файлов. Этот каталог имеет много вложенных каталогов внутри. Я хочу скопировать только файлы заголовков в отдельный каталог, сохранив ту же структуру в новом каталоге.

cp -rf oldDirectory newDirectory скопирует все файлы. Я хочу копировать только заголовочные файлы.


person avimonk    schedule 16.04.2012    source источник
comment
Возможный дубликат рекурсивной копии определенных файлов в Unix/Linux?   -  person iammilind    schedule 09.05.2017


Ответы (3)


(cd src && find . -name '*.h' -print | tar --create --files-from -) | (cd dst && tar xvfp -)

Вы можете сделать что-то подобное с cpio, если вы просто хотите жестко связать файлы, а не копировать их, но после этого, вероятно, потребуется немного mv'ing. Если у вас много данных и вы не возражаете (или нуждаетесь!) в совместном использовании, это может быть намного быстрее. Это сбивает с толку, если в dst должен быть src - это, если это не просто побочный эффект:

  1. find src -name '*.h' -print | cpio -pdlv dst
  2. mv dst/src/* dst/.
  3. rmdir dst/src
person user1277476    schedule 16.04.2012
comment
Звучит хорошо... Я думаю, что cpio - это то, что я искал esp. опция -d. - person avimonk; 25.04.2012

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

rsync -avm --include='*.h' -f 'hide,! */' . /destination_dir

из здесь

person Ben    schedule 05.04.2015

cp -rf oldDirectory/*.h newDirectory

или что-то вроде (в зависимости от фактических путей)

find oldDirectory -type f -name "*.h" -print0 | xargs -file cp file newDirectory
person scibuff    schedule 16.04.2012
comment
Первое решение копирует файлы .h только на глубину 1. Что, если у нас есть файлы заголовков на глубине 2 и 3 и так далее. - person avimonk; 16.04.2012