2013-04-02 16 views
6

Tôi đang sử dụng lệnh cp ./* "backup_$timestamp" trong tập lệnh bash để sao lưu tất cả các tệp trong thư mục vào thư mục sao lưu trong thư mục phụ. Điều này hoạt động tốt, nhưng tập lệnh giữ nguyên các thông báo cảnh báo:cp: im lặng "bỏ qua thư mục" cảnh báo

cp: omitting directory `./backup_1364935268' 

Làm cách nào để yêu cầu cp tắt mà không tắt bất kỳ cảnh báo nào khác mà tôi có thể muốn biết?

Trả lời

2

Có thể bạn muốn sử dụng cp -r trong tập lệnh đó. Điều đó sẽ sao chép nguồn đệ quy bao gồm cả các thư mục. Thư mục sẽ được sao chép và thư sẽ biến mất.


Nếu bạn không muốn sao chép danh bạ bạn có thể làm như sau: stderr

  • chuyển hướng sang thiết bị xuất chuẩn sử dụng 2>&1
  • ống đầu ra để grep -v
script | grep -v 'omitting directory' 

trích dẫn từ trang grep man:

-v, --invert-match 
      Invert the sense of matching, to select non-matching lines. 
+1

Eh, điều đó sẽ làm việc tôi đoán. Tôi đã hy vọng sẽ có một số loại tùy chọn trên cp cho im lặng cảnh báo tin nhắn như thế nhưng tôi đoán là không. – Ajedi32

+0

Bạn có cần bản sao đệ quy của tất cả các tệp và direcotories không? Hoặc chỉ các tệp ở cấp độ đầu tiên của 'backup_ $ timestamp'? – hek2mgl

+0

Không, bởi vì sau đó mỗi khi tôi thực hiện một sao lưu tôi muốn được sao lưu tất cả các bản sao lưu cũ hơn cùng với các tập tin khác. Cảm ơn bạn đã giúp đỡ. – Ajedi32

7

Các giải pháp mà làm việc cho tôi là như sau:

find -maxdepth 1 -type f -exec cp {} backup_1364935268/ \; 

Nó sao chép tất cả (bao gồm cả những bắt đầu với một dấu chấm) tập tin từ thư mục hiện hành, không chạm vào các thư mục và không phàn nàn về nó.

+0

Cộng một: Hoạt động trong Makefile. – ace

+0

Lưu ý: bạn cần đích đến làm thông số đầu tiên khi sử dụng BSD (ví dụ: Mac), vì vậy: 'find. -maxdepth 1-type f -exec cp {} backup_1364935268/\; ' – jjj