Làm cách nào để sao chép cây thư mục nhưng không phải tệp trong Linux?


17

Tôi muốn sao chép khoảng 200 thư mục & thư mục con từ vị trí này sang vị trí khác nhưng tôi không muốn sao chép hàng ngàn tệp trong các thư mục đó. Tôi đang dùng Linux.

Lưu ý: Tôi không có đủ dung lượng để sao chép mọi thứ sau đó xóa tất cả các tệp.

Câu trả lời:




5

Một cách tiếp cận khác là tìmmkdir :

find SOURCE -type d -exec mkdir TARGET/{} \;

Chỉ cần đảm bảo TARGET đã tồn tại hoặc sử dụng tùy chọn -p của mkdir.


3

Bạn cũng có thể làm:

find inputdir -type d | cpio -pdumv destdir

Sức mạnh của sự đơn giản;)


1

Tương tự, sử dụng tar (GNU):

find some/dir -type d -print |
tar --no-recursion -T- -c -p -f- |
(cd another/dir && tar -x -p -f-)

Bạn không thực sự cần -print0dòng lệnh find hoặc dòng lệnh -0rsync trừ khi bạn có tên tệp chứa các ký tự dòng mới (có thể nhưng rất khó xảy ra). Tar (và rsync, và cpio) đọc tên tệp theo từng dòng; sử dụng một bộ kết thúc NULL hầu như rất hữu ích với xargs, thông thường đọc tên tệp được phân tách bằng khoảng trắng (và do đó không xử lý các tệp / thư mục có khoảng trắng trong tên của chúng mà không có -0).



-1
cp -al 

Sẽ sao chép tất cả các tập tin với các liên kết cứng. Cùng cấu trúc, cùng quyền. (lưu ý: liên kết cứng, do đó không mất dung lượng.)


Không thể tạo liên kết cứng qua các ranh giới hệ thống tệp
MountainX cho Monica Cellio

Đúng, nhưng người ta không nói rằng nó nằm trên hệ thống tập tin ...
SvennD

-1

ls -d * / @source: tìm. -type d -print0> dirs.txt @destination: xargs -0 mkdir -p

Điều này sẽ khiến cả hai lệnh sử dụng null làm dấu phân cách thay vì khoảng trắng. Lưu ý rằng thứ tự của -type d và -print0 rất quan trọng!


Điều này không rõ ràng và có vẻ không chính xác. Có vẻ như @source@destinationlà chỉ dẫn cho người đọc, nhưng ngay cả như vậy điều này không thể làm việc.
Luật29
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.