Dòng lệnh đệ quy / sao chép thư mục sâu trong Linux?


13

Cách tốt, chung để tạo một bản sao thư mục đệ quy / sâu trong Linux hoạt động trong hầu hết các trường hợp là gì? Tôi đã sử dụng những thứ đơn giản như câu thần chú cp -Rkhá phức tạp cpio. Có điểm mạnh hay điểm yếu đáng kể nào khiến bạn thích cái này hơn cái kia không? Cái nào bạn sử dụng thường xuyên nhất?

Câu trả lời:


29
NAME
cp - copy files and directories

-a, --archive
   same as -dpR

-d     same as --no-dereference --preserve=links
-p     same as --preserve=mode,ownership,timestamps
-R, -r, --recursive
    copy directories recursively

Vì vậy, trong câu trả lời cho câu hỏi của bạn:

cp -a /foo /bar

Sao chép mọi thứ đệ quy từ thư mục / foo vào thư mục / thanh trong khi duy trì các liên kết tượng trưng và tệp / thư mục 'chế độ' 'quyền sở hữu' & 'dấu thời gian'.


Đây chắc chắn là một giải pháp rất đơn giản và thanh lịch. Bạn đã bao giờ tìm thấy bất kỳ nhược điểm của phương pháp này? Hệ thống tập tin phân tán? Bản sao cực lớn? Bạn đã tìm thấy các giải pháp khác như cpio, tar hoặc rsync để hiệu quả hơn trong một số trường hợp chưa?
Greg Mattes

1
Trừ khi có lỗi vật lý, tôi chưa bao giờ bị lỗi 'cp' cục bộ từ bộ nhớ (tôi chỉ thực hiện chuyển giao có kích thước TB) đến bất kỳ vị trí nào được gắn cục bộ (bất kể gắn NFS hoặc Samba). Thanh toán 'SỬ DỤNG' trong trang man rsync để biết ví dụ bạn sẽ tìm thấy hướng dẫn. Sở thích của tôi: $ rsync --partial --proceed --rsh = ssh --archive --verbose --compress foo / user @ hosname: ~ / bar (rsync -avzP)
Gareth

Như tôi đã lưu ý ở trên, -a không hoàn toàn di động.
Matthew Flaschen

Tôi biết rằng busybox, GNU & BSD cp đều ổn. Khác với các hộp Unix kế thừa Tôi chưa bao giờ thấy những gì sẽ không hoạt động? Tôi thực sự không nhìn thấy vấn đề khác mặc dù tôi hoàn toàn hiểu được suy nghĩ của Zoredache về "Nó dường như luôn hoàn thành công việc một cách chính xác, vì vậy tôi chưa bao giờ thực sự khó tìm được người thay thế."
Gareth

@gyaresu Vui lòng xem xét tách bình luận thứ hai của bạn thành một câu trả lời khác để chúng tôi có thể bỏ phiếu cho nó.
Greg Mattes

6

Tôi sử dụng một lệnh như "cd $ srcdir; tar -c. | Tar -C $ Destdir -x" thường xuyên nhất. Nhưng tôi cũng sử dụng rsync -a $ src $ dst.

Điểm mạnh lớn nhất của giải pháp tar là nó là thứ tôi phải sử dụng trên một hệ thống nhiều năm trước không có cpio, rsync hoặc cp sẽ sao chép đệ quy. Tar là khá nhiều ở khắp mọi nơi. Nó bị kẹt trên đầu vì tôi đã sử dụng nó rất nhiều, có lẽ có nhiều cách thanh lịch hơn. Nó dường như luôn hoàn thành công việc một cách chính xác, vì vậy tôi chưa bao giờ thực sự tìm kiếm một người thay thế.


Tôi thích lập luận "sự phổ biến của tar" rất nhiều. Tôi thành thạo vi vì những lý do tương tự mặc dù tôi thích các môi trường chỉnh sửa khác.
Greg Mattes

-R từ lâu đã là một phần của tiêu chuẩn ( opengroup.org/onlinepub/009695399/utilities/cp.html ) mặc dù không -a.
Matthew Flaschen

@Matthew Flaschen: Nhận xét của bạn có dành cho câu trả lời của @ gyaresu không?
Greg Mattes

Nó cũng liên quan đến cái này, vì Zoredache nói rằng anh ta đã gặp một hệ thống "không có [...] một cp sẽ sao chép đệ quy". Về cơ bản, -R -> xách tay, -a -> không di động.
Matthew Flaschen

1
Điều này đã trở lại vào năm ~ 95 và hệ thống đang chạy phiên bản Unix cuối thập niên 80. Tôi không nghĩ -R là một lựa chọn cho cp, nhưng tôi không chắc chắn. Tôi đã học được rằng tidbit đọc usenet.
Zoredache

6

Hãy xem rsync ... Tôi thích nó vì bạn sao chép ít dữ liệu hơn khi cập nhật hai thư mục ... nó cũng có thể hoạt động từ xa. Ở dạng đơn giản nhất rsync -a / src / mệnh


Đây là một điểm thực sự tốt. Về cơ bản rsync có khả năng tính toán "thư mục diff" và chỉ chuyển những gì cần thiết để đồng bộ hóa các thư mục. Vì vậy, bạn có thể liên tục gọi một cái gì đó như rsync -a src / Dest để "sao chép liên tục" các thư mục theo cách đệ quy (trailing / on src là cần thiết để đồng bộ hóa phù hợp) trong khi cp -a src / Dest không hoạt động như vậy. Lệnh cp sẽ tạo một thư mục src mới trong mệnh đề sau cp đầu tiên. Bạn sẽ cần một cái gì đó như cp -au src / * mệnh cho các bản sao tiếp theo.
Greg Mattes

Một lý do khác mà tôi thích rsync là bạn có thể chuyển cho nó cờ -P, hiển thị thanh tiến trình. Nó cung cấp cho bạn một số ý tưởng về việc một cái gì đó sẽ mất bao lâu
Rory

0

rsynclà một công cụ tuyệt vời. Nó là con dao quân đội thụy sĩ chuyển dữ liệu. Đó là một công cụ đơn giản và mạnh mẽ. Một khi bạn bắt đầu sử dụng nó, bạn sẽ bị cuốn hút.

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.