Khi bạn sao chép sử dụng cp -a source/* target/bạn đang sao chép hầu hết các tập tin và thư mục từ sourceđể target. Cụ thể, các mục được loại trừ có thể sẽ là các tệp bắt đầu bằng dấu chấm ( .) ở cấp cao nhất source.
Xem xét các tệp (hoặc thư mục) trong source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will not be copied
Khi bạn sao chép bằng cách sử dụng, cp -a source/. target/bạn đang sao chép toàn bộ nội dung của source, bao gồm mọi mục bắt đầu bằng dấu chấm ( .) sangtarget
Xem xét các tệp (hoặc thư mục) trong source
apple # will be copied
banana/ # will be copied, as will all its contents
.cherry # will be copied
Nếu bạn đang sử dụng bash, zshbạn có thể sử dụng dotglobtùy chọn để thay đổi ý nghĩa của *nó để bao gồm các tệp và thư mục bắt đầu bằng dấu chấm ( yashcũng có dotglobtùy chọn; tuy nhiên, sau đó nó bao gồm .và ..mở rộng toàn cầu làm hạn chế khả năng sử dụng của nó. Xem thêm FIGNORE='@(.|..)'trong ksh93).
Thật thú vị, cp -a source/. target/được đảm bảo không bao giờ tạo ra các thành phần target/source. (Mặt khác, cp -a source target/sẽ thực hiện một trong hai điều tùy thuộc vào việc targetcó tồn tại hay không . Xem Cách sao chép một thư mục theo cách đệ quy bằng cách sử dụng cp để biết chi tiết.)
Khi bạn xóa bằng cách sử dụng, rm -rf source/*bạn đang xóa các tệp và thư mục trong sourceđó không bắt đầu bằng dấu chấm ( .). Theo dotglobcài đặt tôi đã đề cập. Nó sẽ không xóa thư mục sourcechính nó.
Khi bạn cố xóa bằng cách sử dụng, rm -rf source/.nó sẽ thất bại - như những người khác đã giải thích - vì POSIX cấm xóa một đường dẫn có thành phần cuối cùng là .hoặc ... Tương đương gần nhất là rm -rf source, sẽ xóa sourcethư mục và tất cả nội dung của nó bất kể chúng có bắt đầu bằng dấu chấm ( .) hay không.
It's up to the command whether that trailing dot makes any senseỪm, dấu chấm luôn liên kết đến chính thư mục chứa, vì vậy../foldersource/.không nên khác với việc nêu./foldersource/và thực tế nó chỉ là một cách thừa để nêu điều tương tự. Không có lệnh nào cố gắng "làm cho ý nghĩa" của dấu chấm hoặc dấu chấm kép, vì đây là các tiêu chuẩn trên các hệ thống tệp Linux / Unix.rmchỉ cần từ chối loại bỏ thư mục làm việc hiện tại nhưjimmijđã nêu trong câu trả lời của họ. Ngoài ra, lưu ý rằng bạn đang sử dụng./trong tất cả các ví dụ của mình trong khi OP có../ở đó. Một chút khác biệt (lớn).