2012-04-16 40 views
5

Tôi có một thư mục có nhiều tệp tiêu đề (.h) và các tệp .o và .c khác và các tệp khác. Thư mục này có nhiều thư mục lồng nhau bên trong. Tôi chỉ muốn sao chép các tệp tiêu đề vào một thư mục riêng biệt duy trì cùng cấu trúc trong thư mục mới.Làm cách nào tôi có thể sao chép các tệp tiêu đề trong toàn bộ thư mục lồng vào thư mục khác giữ cùng một hệ thống phân cấp sau khi sao chép vào thư mục mới

cp -rf oldDirectory newDirectory sẽ sao chép tất cả các tệp. Tôi chỉ muốn sao chép các tệp tiêu đề.

+0

có thể trùng lặp của (http [bản đệ quy các tập tin cụ thể trong Unix/Linux?]: //stackoverflow.com/questions/9622883/recursive-copy-of-specific-files-in-unix-linux) – iammilind

Trả lời

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

Bạn có thể làm điều gì đó tương tự với cpio nếu bạn chỉ muốn liên kết cứng các tập tin thay vì sao chép chúng, nhưng nó có thể yêu cầu một chút mv'ing sau đó. Nếu bạn có nhiều dữ liệu và không quan tâm (hoặc cần!) Chia sẻ, điều này có thể nhanh hơn nhiều. Nó bị nhầm lẫn nếu dst cần phải có một src trong nó - đây là, nếu nó không chỉ là một tác dụng phụ:

  1. tìm src -name '* .h' -print | cpio -pdlv dst
  2. mv dst/src/* dst /.
  3. rmdir dst/src
+0

Âm thanh tốt ... Tôi nghĩ rằng cpio là những gì tôi đang tìm kiếm esp. tùy chọn -d. – avimonk

1
cp -rf oldDirectory/*.h newDirectory 

hoặc một cái gì đó tương tự (tùy thuộc vào con đường thực tế)

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

Giải pháp đầu tiên chỉ sao chép các tệp .h ở độ sâu 1. Điều gì sẽ xảy ra nếu chúng tôi có các tệp tiêu đề ở độ sâu 2 và 3 và cứ tiếp tục như vậy. – avimonk

1

này làm việc cho tôi:

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

từ here

Các vấn đề liên quan