Cp cp: bỏ qua thư mục có nghĩa là gì?


408

Tôi đã ban hành lệnh sau:

sudo cp ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Khi tôi làm điều này, tôi bắt đầu nhận được các thông báo sau:

cp: omitting directory `Tag' 
cp: omitting directory `Test' 
cp: omitting directory `Text' 
cp: omitting directory `TimeSync' 
cp: omitting directory `Tool' 
cp: omitting directory `Translate' 
cp: omitting directory `Uri' 
cp: omitting directory `Validate' 

và v.v.

Tại sao tôi nhận được những tin nhắn này?

Câu trả lời:


536

Theo mặc định, cpchỉ sao chép các tệp trực tiếp trong và không phải thư mục con trong thư mục. Thông cp: omitting directory 'directory'báo cảnh báo bạn rằng thư mục được đề cập không được sao chép.

Để làm như vậy, chỉ định tùy chọn -r(hoặc --recursive):

sudo cp -r ~/Transfers/ZendFramework-1.11.4-minimal/library/Zend/* ~/public_html/cmsk.dev/library/

Các trang hướng dẫn (lệnh: man cp) chứa một tổng quan về các tùy chọn có sẵn.


2
Cảm ơn rất nhiều. Tôi nghĩ rằng * sẽ đối phó với nó một cách đệ quy bằng cách nào đó. Nhưng không. : D Cảm ơn một lần nữa. :)
MEM

11
@MEM: *được mở rộng bởi Bash, không phải bởi cp. Tự kiểm tra bằng cách đặt echo trước lệnh của bạn. Khi được mở rộng, nó khớp với mọi thứ có trước ...library/Zend/(các tệp và thư mục trong đó).
Lekensteyn

Tin tốt là điều omitting directory 'directory'đó không có nghĩa là nó đang xóa thư mục đó.
Bishwas Mishra

@Lekensteyn tôi đã cố gắng để sao chép nội dung của một người dùng khác .so i đạt được sự cho phép của người dùng với chmod a+rx ~/sau khi tôi đã cố gắng để sao chép với cp /home/2110/* /home/2111/nó tạo ra lỗi trong đó nêu phép từ chối. tôi đã sai ở đâu xin lỗi để bình luận vì tôi không thể hỏi các câu hỏi trùng lặp. tôi hy vọng được trả lời nhanh :)
jasinth Premkumar

@jasinthpremkumar Các tệp trong /home/2110được sở hữu bởi người dùng 2110 trong khi các tệp trong /home/2111được cho là thuộc sở hữu của 2111. Để đặt chủ sở hữu, hãy sử dụng một cái gì đó như sudo chown -R 2111 /home/2111.
Lekensteyn

40

Thông báo có nghĩa là cpđã không sao chép các thư mục được liệt kê. Đây là hành vi mặc định cho cp- chỉ các tệp được sao chép bình thường, bất kể bạn chỉ định rõ ràng hay sử dụng chúng *. Nếu bạn muốn sao chép thư mục, hãy sử dụng công -rtắc có nghĩa là "đệ quy".


16

Vài điều cần kiểm tra ở đây:

  1. Đừng sử dụng sudo. Bạn không cần nó, bạn đã có quyền viết nội dung trong thư mục nhà của riêng bạn.

  2. Bạn có thể dễ dàng xem các tệp và thư mục ẩn trong trình quản lý tệp đồ họa bằng cách chọn Xem / Hiển thị tệp ẩn từ menu. Hoặc bằng cách nhấn Ctrl- H.

  3. Bạn cần sử dụng -Rtùy chọn trong cplệnh để sao chép một thư mục và nội dung của nó.

  4. / home không phải là thư mục nhà của bạn. / nhà / tên người dùng là. Vì vậy, có lẽ bạn đang cố gắng sao chép từ sai chỗ.

  5. Shell là trường hợp nhạy cảm, vì vậy ~ / tải xuống và ~ / Tải xuống là hai thứ khác nhau.


2

Khi bạn đang sao chép một thư mục như:

cp dir1 copy_of_dir1

Bạn chỉ sao chép chính xác dir1và không phải các tệp trong đó, vì vậy cuối cùng, bạn sẽ kết thúc với một cấu trúc thư mục mới trong khi cấu trúc không tồn tại.

Nói cách khác sau khi nó đã được sao chép nó sẽ nói rằng nội dung của tôi là file1, file2, vv; Tuy nhiên những tập tin này đã không được sao chép và do đó không tồn tại trong đó.

Vì vậy, để khắc phục sự cố này có thể xuất hiện cptheo mặc định không sao chép các thư mục và bỏ qua chúng trừ khi bạn chỉ định -rtùy chọn sao chép tất cả các tệp theo cách đệ quy.


1

Lý do nó nói omitting directorylà bởi vì cpvà tất cả các tiện ích sao chép, mà tôi biết, tạo ra một danh sách các tệp và thư mục con sẽ được sao chép trước khi bắt đầu sao chép các tệp. Khi các --recursivetùy chọn bị thiếu, các thư mục con sẽ bị xóa khỏi danh sách này. Như vậy, bỏ qua đề cập đến việc xóa khỏi danh sách sao chép, không phải từ phương tiện nguồn của bạn. Tôi tin rằng điều này giải quyết ý nghĩa của tin nhắn.


0

Lệnh cp được sử dụng để sao chép các tệp và thư mục, không phải các thư mục lồng nhau, nếu bạn muốn sao chép các thư mục lồng nhau thì bạn có thể thêm -r sau đó, trong đó -r có nghĩa là đệ quy.

Cú pháp mà bạn có thể theo dõi (chạy bằng root):

cp -r /source/dir/* /destination/ 

hoặc là

cp --recursive /source/dir/* /destination/

-1

Giả sử bạn có hai thư mục 'Tag' & 'Test'

Nếu bạn muốn sao chép thư mục 'Tag' vào thư mục 'Test', hãy sử dụng lệnh

$ : cp -r Tag Test (case sensitive)

Chủ yếu là vấn đề sẽ được giải quyết với mã ở trên nếu không và bạn nhận được thông báo bên dưới như

cp: omitting directory `Tag' 
cp: omitting directory `Test'

sau đó thêm một số tệp trong thư mục 'Tag' và sau đó sao chép chúng vào 'Kiểm tra'. Trên thực tế tôi có cùng một vấn đề nhưng giải quyết như những gì tôi nói thứ hai.

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.