Theo mặc định, cpkiểm tra nếu đối số cuối cùng của nó là một thư mục hiện có. Nếu điều này xảy ra, cptạo một liên kết bên trong thư mục đó, với tên cơ sở của nguồn. Đó là, đưa ra lệnh
cp foo/bar wibble
nếu wibblelà một thư mục hiện có thì cpsao chép nguồn vào wibble/bar. Nếu wibblekhông tồn tại thì cpliên kết nguồn tới wibble.
Nếu bạn muốn chắc chắn rằng bản sao luôn luôn wibble, thì bạn có thể chỉ định tùy chọn --no-target-directory(bí danh -T). Bằng cách đó, nếu cpthành công, bạn có thể chắc chắn rằng bản sao được gọi wibble. Nếu wibbleđã tồn tại như một thư mục, thì cpsẽ thất bại.
Ở dạng bảng:
The target is … Without -T With -T
existing directory copy in the directory error
existing file (not dir) overwrite overwrite
does not exist create create
Sự khác biệt duy nhất là với -T, trong trường hợp đích là một thư mục hiện có, lệnh sẽ trả về một lỗi. Điều này hữu ích khi bạn mong muốn thư mục không tồn tại: bạn nhận được thông báo lỗi thay vì điều gì đó không dự đoán được xảy ra.
Điều tương tự áp dụng cho mvvà ln. Nếu mục tiêu là một thư mục hiện có, với -T, chúng báo hiệu một lỗi thay vì âm thầm làm điều gì đó khác đi.
Với cp, có một trường hợp khác. Nếu bạn thực hiện một bản sao đệ quy và nguồn là một thư mục, sau đó cp -Tsao chép nội dung của nguồn vào đích, thay vì sao chép chính nguồn đó. Đó là, đã cho
$ tree source destination
source
└── foo
destination
└── bar
sau đó
$ cp -rv source destination
`source' -> `destination/source'
`source/foo' -> `destination/source/foo'
trong khi
% cp -rvT source destination
`source/foo' -> `destination/foo'
--no-target-directorytùy chọn [out] : miễn là tôi sử dụng --recursive, mọi thứ đều ổn [vớicoreutils 8.12GNU / Linux]. Sự khác biệt chính dường như là với--no-target-directorynội dung nhưng bản thân thư mục không được sao chép [nghiên cứu vẫn đang được tiến hành]