2009-03-02 39 views
19

Tôi đang tìm cách tạo một bản sao cụ thể trong Fedora.Làm thế nào tôi có thể đệ quy sao chép thư mục vào thư mục khác và chỉ thay thế các tệp chưa thay đổi?

Tôi có hai thư mục:

  • 'webroot': giữ TẤT CẢ các file web/images vv

  • 'xuất khẩu': thư mục chứa hàng ngàn PHP, CSS, tài liệu JS được xuất khẩu từ repo SVN của tôi.

Thư mục xuất chứa nhiều tệp/thư mục giống như gốc, tuy nhiên thư mục gốc chứa nhiều tệp/thư mục không tìm thấy trong xuất.

tôi muốn hợp nhất tất cả các nội dung của xuất khẩu với webroot của tôi với các tùy chọn sau:

  1. ghi đè các tập tin trong webroot nếu phiên bản xuất khẩu của chứa mã khác với những gì là bên trong của phiên bản webroot của (sống)
  2. Bảo tồn quyền/người dùng/nhóm của tệp nếu ghi đè (xuất phiên bản thay thế phiên bản trực tiếp) * LƯU Ý Tôi muốn quyền sở hữu/quyền sở hữu webroots được duy trì, nhưng với nội dung xuất khẩu
  3. Không nhắc/dừng bản sao của bất kỳ loại (tức là không verbose)
  4. bản đệ quy - rõ ràng là tôi muốn sao chép tất cả các file * thư mục và thư mục con được tìm thấy trong xuất khẩu

tôi đã thực hiện một chút nghiên cứu cp - điều này sẽ làm công việc ?:

cp -pruf ./export /path/to/webroot 
+0

Lưu ý rằng tiêu chí đầu tiên của bạn không rõ ràng. Các câu trả lời chủ yếu giả sử bạn có nghĩa là 'nếu tệp trong webroot mới hơn tệp xuất, hãy để nó một mình'. Nếu bạn thực sự có nghĩa là 'so sánh nội dung và sao chép phiên bản xuất nếu có sự khác biệt', thì chỉ cần sao chép mọi thứ ... tiếp tục ... –

+0

... tiếp tục ... khi các tệp mới sẽ xuất hiện và các tệp cũ giống nhau trong cả hai sẽ vẫn giống nhau sau khi sao chép - ngoại trừ có lẽ cho thời gian sửa đổi. –

+0

Cảm ơn phản hồi này - Tôi sẽ cập nhật câu hỏi – barfoon

Trả lời

24

Có thể, nhưng bất cứ lúc nào các tệp tương ứng trong exportwebroot có cùng nội dung nhưng thời gian sửa đổi khác nhau, bạn sẽ thực hiện thao tác sao chép không cần thiết. Có thể bạn sẽ nhận được hành vi hơi thông minh hơn từ rsync:

rsync -pr ./export /path/to/webroot 

Bên cạnh đó, rsync có thể sao chép tập tin từ một máy chủ khác qua một kết nối SSH, nếu bạn đã từng có một nhu cầu để làm điều đó. Thêm vào đó, nó có một lựa chọn zillion bạn có thể chỉ định để tinh chỉnh hành vi của nó - xem trong trang người đàn ông để biết chi tiết.

CHỈNH SỬA: liên quan đến việc làm rõ ý bạn bằng cách giữ quyền: bạn có thể muốn thoát khỏi tùy chọn -p.

6
  1. -u ghi đè thư mục file hiện tại nếu điểm đến là lớn hơn nguồn
  2. -p perserves sự cho phép và ngày
  3. -f tắt verbosity
  4. -r làm cho các bản sao đệ quy

Vì vậy, có vẻ như bạn có tất cả các args đúng cp

5

Âm thanh như một công việc cho cpio (và do đó, có lẽ, GNU tar có thể làm điều đó quá):

cd export 
find . -print | cpio -pvdm /path/to/webroot 

Nếu quý vị cần chủ bảo quản, bạn phải làm điều đó như là người chủ, tất nhiên. Tùy chọn -p là 'chế độ chuyển', nghĩa là sao chép giữa các vị trí; -v là tiết (nhưng không tương tác; có sự khác biệt); -d có nghĩa là tạo thư mục khi cần thiết; -m có nghĩa là bảo tồn thời gian sửa đổi. Theo mặc định, không có tùy chọn -u, cpio sẽ không ghi đè lên các tệp trong khu vực mục tiêu mới hơn so với khu vực nguồn.

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