Sao chép tập tin sao chép, không ghi đè?


21

Tôi đã có một thư mục chứa một loạt các thư mục khác chứa các tệp CoffeeScript / JavaScript. Tôi có thể biên dịch các tệp CoffeeScript thành một thư mục mới có cùng cấu trúc thư mục.

Những gì tôi muốn làm là sao chép tất cả các tệp * .js trong thư mục nguồn vào thư mục đích theo cách đệ quy. Tôi cũng không muốn ghi đè lên bất kỳ tệp nào đã có trong thư mục đích. Bất kỳ suy nghĩ làm thế nào để thực hiện điều này?

Tôi đã thử sử dụng cp -n source/**.js desination/cp -Rn source/**.js desination/sau khi xem xét một câu hỏi tương tự khác, nhưng dường như nó không hoạt động.

Bất kỳ ý tưởng làm thế nào để thực hiện điều này?


Bạn đã có một cái nhìn vào rsync?
bonob

@bonob Tôi không có. Tôi đã sử dụng nó một hoặc hai lần, nhưng chỉ để nhận tệp từ xa.
AlbertEngelB

Câu trả lời:


25

Bạn có thể sử dụng rsync (nó cũng sao chép cục bộ)

rsync -r --ignore-existing --include=*/ --include=*.js --exclude=* source/ destination
  • -r để tái diễn vào các thư mục,
  • --ignore-existing để bỏ qua các tập tin hiện có ở đích
  • các includeexcludebộ lọc trung bình: bao gồm tất cả các thư mục, bao gồm các file tất cả * .js, loại trừ phần còn lại; bao gồm đầu tiên là cần thiết, nếu không thì loại trừ cuối cùng cũng sẽ loại trừ các thư mục trước khi quét nội dung của chúng.

Cuối cùng, bạn có thể thêm một -Pnếu bạn muốn xem tiến trình, --list-onlynếu bạn muốn xem những gì nó sẽ sao chép mà không thực sự sao chép và -tnếu bạn muốn giữ dấu thời gian.


Điều này không liên quan, nhưng tôi đã học được lệnh rsync gần đây, khi tôi chuyển 15 năm tài liệu từ phân vùng này sang phân vùng khác. Tự tin rằng các tập tin của tôi đã ở đó, sau đó tôi xóa sạch phân vùng cũ và đặt một số thứ khác vào đó; Sau đó tôi nhận ra rằng tôi đã mất tất cả các dấu thời gian và phát hiện ra cờ -t. Chỉ muốn chia sẻ nỗi đau khổ của tôi: '(


Haha, cái này làm việc rsyncRõ ràng là quả bom.
AlbertEngelB

3
Vâng, tôi hầu như không biết điều đó nhưng chỉ học được rất nhiều về nó bằng cách cố gắng trả lời câu hỏi của bạn. Nếu bạn cần đi xa hơn trong tương lai, bạn có thể xác định các bộ lọc phức tạp trong các tệp và gọi chúng trong lệnh chẳng hạn. Bạn cũng có thể có các bộ lọc theo thư mục, nén dữ liệu khi sao chép và điều đó chỉ làm trầy xước bề mặt của nó!
bonob

7

Điều này cũng có thể đạt được bằng cách sử dụng cp. Xem tại đây:

sudo cp -vnpr /xxx/* /yyy

xxx = nguồn

yyy = đích

v = dài dòng

n = không ghi đè (không ghi đè)

p = bảo vệ quyền

r = đệ quy


5

Nhìn vào các trang người đàn ông có vẻ như bạn muốn -ntùy chọn.

-n, --no-clobber
   do not overwrite an existing file (overrides the previous -i option)

Tôi đã thử sử dụng -n, tuy nhiên nó không cho phép tôi lọc theo các tệp * .js.
AlbertEngelB

0

Bản phân phối của tôi không có sẵn clobber, vì vậy:

echo n | cp -vipr xxx yyy

xxx = nguồn

yyy = đích

v = dài dòng

i = tương tác (nhắc ghi đè) | đó là lý do tại sao lệnh được đi trước với "echo n |"

p = bảo vệ quyền

r = đệ quy

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.