2014-05-16 14 views
9

Tôi muốn sao chép tất cả các tệp từ thư mục con vào thư mục khác mà không sao chép thư mục gốc. Trong một thiết bị đầu cuối tôi sẽ chỉ làm điều này:Cách sao chép tất cả các tệp từ thư mục này sang thư mục khác trong tập lệnh bash

cp -r dir1/* dir2 

và sau đó dir2 sẽ chứa tất cả các tệp từ dir1 mà không chứa dir1. Tôi đang cố gắng để nhân rộng này trong một kịch bản bash và tôi nhận được một lỗi. Đây là mã bash của tôi:

cp -r $pck_dir"/*" $TAR_DIR"/pck/" 

tôi nhận được lỗi này:

cp: cannot stat ‘./mailman/lists/mailman/*’: No such file or directory 

Đây là kỳ lạ vì tôi có thể xác minh rằng các thư mục trong câu hỏi tồn tại. Tôi tin rằng bash là phàn nàn về '*' nhưng tôi không chắc chắn lý do tại sao. Ai đó có thể khai sáng cho tôi về những gì tôi đang làm sai?

+4

'cp -r "$ pck_dir"/* "$ TAR_DIR"/PCK/'- bỏ phiếu đóng cửa như lỗi đánh máy. – devnull

+0

Bất kỳ vấn đề nào khi sử dụng '{}' xung quanh biến 'cp -r $ {pck_dir}/* $ {TAR_DIR}/pck /' – PradyJord

+2

Đây là câu hỏi được nêu rõ với câu trả lời rõ ràng. Tôi đã có cùng một vấn đề và nhờ câu hỏi này tôi không còn nữa. Lời giải thích cho lý do tại sao câu hỏi này được đóng lại không có ý nghĩa. – andreasdr

Trả lời

10

Mở rộng trên bình luận devnull của:

  • Quotes của bất kỳ loại xung quanh một ký tự đại diện, như *, sẽ ngăn chặn vỏ từ mở rộng ký tự đại diện. Vì vậy, bạn chỉ nên viết "/*" nếu bạn muốn một dấu gạch chéo theo sau bởi một ngôi sao theo nghĩa đen.

  • Biến không được xác định sẽ bị tách từ. Vì vậy, nếu pck_dir có giá trị my dir thì $pck_dir"/*" sẽ được mở rộng thành hai từ mydir/* và cả hai từ sẽ được chuyển đến cp làm đối số riêng biệt. Trừ khi bạn muốn tách từ, các biến shell phải luôn nằm trong dấu ngoặc kép.

Vì vậy, để có được những gì bạn muốn, sử dụng:

cp -r "$pck_dir"/* "$TAR_DIR/pck/" 
2

Sử dụng dòng lệnh rsync thay thế.

rsync -auv dir1/dir2/

sẽ đồng bộ hóa một cách đệ quy tất cả các file từ thư mục dir1 dir2 vào thư mục.

người rsync

để có được lời giải thích hơn để biết cách sử dụng dòng COMAND này.

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