2012-04-16 9 views
5

Mam katalog, który ma dużo plików nagłówkowych (.h) i innych plików .o i .c i inne pliki. Ten katalog zawiera wiele zagnieżdżonych katalogów. Chcę skopiować tylko pliki nagłówkowe do oddzielnego katalogu zachowującego tę samą strukturę w nowym katalogu.Jak mogę skopiować tylko pliki nagłówkowe w całym katalogu zagnieżdżonym do innego katalogu zachowującego tę samą hierarchię po skopiowaniu do nowego folderu

cp -rf oldDirectory newDirectory spowoduje skopiowanie wszystkich plików. Chcę skopiować tylko pliki nagłówkowe.

+0

Możliwy duplikat (http [rekurencyjnych kopii określonych plików w Unix/Linux?] //stackoverflow.com/questions/9622883/recursive-copy-of-specific-files-in-unix-linux) – iammilind

Odpowiedz

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

można zrobić coś podobnego z cpio jeśli chcesz po prostu twardym linku plików zamiast kopiowania ich, ale to prawdopodobnie wymagać będzie trochę mv'ing później. Jeśli masz dużo danych i nie masz nic przeciwko (lub potrzebujesz!) Udostępniania, może to być znacznie szybsze. Staje się zdezorientowany, jeśli dst musi mieć src - to jest, jeśli nie jest to tylko efekt uboczny:

  1. znajdź src -name '* .h' -print | cpio -pdlv dst
  2. mv dst/src/* dst /.
  3. rmdir DST/src
+0

Brzmi nieźle ... Myślę, że cpio jest tym, czego szukałem. opcja -d. – avimonk

1
cp -rf oldDirectory/*.h newDirectory 

lub coś podobnego (w zależności od rzeczywistych ścieżek)

find oldDirectory -type f -name "*.h" -print0 | xargs -file cp file newDirectory 
+2

Pierwsze rozwiązanie kopiuje pliki .h tylko na głębokości 1. Co jeśli mamy pliki nagłówkowe na głębokości 2 i 3 i tak dalej. – avimonk

1

ten pracował dla mnie:

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

z here

Powiązane problemy