Làm thế nào để buộc cp ghi đè mà không cần xác nhận


666

Tôi đang cố gắng sử dụng cplệnh và buộc ghi đè.

Tôi đã thử cp -rf /foo/* /bar, nhưng tôi vẫn được nhắc xác nhận từng ghi đè.

Câu trả lời:


1111

Bạn có thể làm yes | cp -rf xxx yyy, nhưng gutfeeling của tôi nói rằng nếu bạn làm điều đó như là người chủ - bạn .bashrchay .profilecó một bí danh của cpđể cp -i, hệ thống hiện đại nhất (chủ yếu là RH-phái sinh) làm điều đó vào hồ sơ gốc.

Bạn có thể kiểm tra các bí danh hiện có bằng cách chạy aliastại dấu nhắc lệnh hoặc which cpchỉ kiểm tra các bí danh cp.

Nếu bạn có một bí danh được xác định, việc chạy unalias cpsẽ xóa bỏ điều đó cho phiên hiện tại, nếu không bạn chỉ có thể xóa nó khỏi hồ sơ shell của mình.

Bạn có thể tạm thời bỏ qua một bí danh và sử dụng phiên bản không có bí danh của lệnh bằng cách thêm tiền tố vào \, ví dụ:\cp whatever


3
Ngoài ra, hãy cảnh giác - ngay cả khi bí danh không được viết trực tiếp bằng .bashrc, nếu bất cứ điều gì khác, tệp này sẽ kết thúc bằng cách gọi một thứ khác thao túng bí danh cho cp, bạn sẽ gặp phải hành vi này.
Jon

4
Theo "các hệ thống hiện đại", anh ta có nghĩa là RHEL / centos / fedora và có lẽ là thứ gì khác, Debian / Ubuntu không bí danh cp. Tôi thích RHEL trên máy chủ và sử dụng Fedora trong gần một thập kỷ, nhưng sự hỗ trợ cộng đồng của Ubuntu và chuyển trở lại Gnome đã khiến tôi lo lắng sau khi Nvidia giết cài đặt Fedora của tôi. Tôi ¯\_(ツ)_/¯về nó.
Ray Foss

2
@RayFoss Đã thêm một (primarily RH-derivatives)nhận xét :)
yêu thích

sau khi thực hiện unalias cpvà sao chép bất cứ thứ gì bạn cần sao chép, bạn có thể đặt bí danh trở lại mặc định bằng cách thực hiện alias cp='cp -i'. Sau đó, chạy alias cpđể bạn có thể xác minh rằng nó trở về bí danh mặc định.
jaxarroyo

287

Điều này có thể được gây ra bởi cpđã được đặt bí danh cho một cái gì đó như cp -i. Gọi cptrực tiếp nên làm việc:

/bin/cp -rf /zzz/zzz/* /xxx/xxx

Một cách khác để khắc phục điều này là sử dụng yeslệnh:

yes | cp -rf /zzz/zzz/* /xxx/xxx

6
vâng, tôi đã làm unalias cp -i, bây giờ nó đang hoạt động .. Cảm ơn bạn đã trả lời có giá trị của bạn.
thiyagu114

5
Tôi thích rằng unix cung cấp yeslệnh. Vui nhộn. Và một ngày nào đó tôi có thể sử dụng nó.
Matthew Leingang

3
vâng, đó là bí danh, bắt tốt :) Bạn có thể sử dụng \ cp để gọi cp gốc, dễ dàng hơn là nhớ đường dẫn / bin / cp
Hugo Zaragoza

Đúng, đó là một cách khác để bỏ qua bí danh. Một loại hack gọn gàng!
pgl

1
Cách này an toàn hơn.
plusmancn

115

Như một số câu trả lời khác đã nêu, bạn có thể sử dụng một bí danh ở đâu đó cpđể ánh xạ tới cp -ihoặc một cái gì đó tương tự. Bạn có thể chạy một lệnh mà không có bất kỳ bí danh nào bằng cách đặt trước nó bằng dấu gạch chéo ngược. Trong trường hợp của bạn, hãy thử

\cp -r /zzz/zzz/* /xxx/xxx

Dấu gạch chéo ngược sẽ tạm thời vô hiệu hóa bất kỳ bí danh nào bạn đã gọi cp.


2
@zhouji Phản ứng dữ dội vô hiệu hóa bí danh, như đã nêu trong câu trả lời của tôi. Vì vậy, thay vì gọi bí danh cp, \cpsẽ gọi lệnh cp. Điều này dường như là tương đương với chạy command cp.
Chris

66

Bạn có thể có một bí danh ở đâu đó, ánh xạ cptới cp -i; bởi vì với các cài đặt mặc định, cpsẽ không yêu cầu ghi đè. Kiểm tra của bạn .bashrc, của bạn.profile vv

Xem cp manpage : Chỉ khi -itham số được chỉ định sẽ cpthực sự nhắc trước khi ghi đè.

Bạn có thể kiểm tra điều này thông qua aliaslệnh:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

Để xác định bí danh, sử dụng:

$ unalias cp

vâng, tôi đã làm unalias cp -i, bây giờ nó đang hoạt động .. Cảm ơn bạn đã trả lời có giá trị của bạn.
thiyagu114

1
nó chỉ là "unalias cp"
Krv Perera

49

Như các câu trả lời khác đã nêu, điều này có thể xảy ra nếu cplà bí danh cp -i.

Bạn có thể nối thêm \trước cplệnh để sử dụng nó mà không có bí danh.

\cp -fR source target

1
Như bạn đã nói, những người khác đã tuyên bố điều này. Tại sao điều này nhận được 45 upvote?
phil294

@ phil294 Tôi đoán đây là cách dễ nhất mà không cần sửa đổi bí danh hoặc xóa bí danh cp có thể hữu ích cho các cách sử dụng khác. `` Nó rất hữu ích ở đây.
Arnold Roa

18

Theo mặc định cpcó aliase đến cp -i. Bạn có thể kiểm tra nó, gõ aliasvà bạn có thể thấy một số như:

alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

Để giải quyết vấn đề này, chỉ cần sử dụng /bin/cp /from /tolệnh thay thếcp /from /to


9

bạn cũng có thể sử dụng lệnh này:

cp -ru /zzz/zzz/* /xxx/xxx

nó sẽ cập nhật tập tin hiện tại của bạn với tập tin mới hơn.


8

cp thường là bí danh như thế này

alias cp='cp -i'   # i.e. ask questions of overwriting

nếu bạn chắc chắn rằng bạn muốn ghi đè thì hãy sử dụng:

/bin/cp <arguments here> src dest


7

Vì vậy, tôi gặp phải vấn đề này rất nhiều vì tôi giữ bí danh cp cp -ivvà tôi đã tìm thấy một mánh khóe gọn gàng. Nó chỉ ra rằng trong khi -i-ncả hai hủy bỏ các chỉ thị ghi đè trước đó, -fthì không. Tuy nhiên, nếu bạn sử dụng -nfnó sẽ thêm khả năng xóa -i. Vì thế:

cp -f /foo/* /bar  <-- Prompt
cp -nf /foo/* /bar <-- No Prompt

Khá gọn gàng hả? / hoại tử



5

Một cách khác để gọi lệnh mà không có bí danh là sử dụng hàm commanddựng sẵn trong bash.

command cp -rf /zzz/zzz/*


4

-n là "không ghi đè" nhưng câu hỏi của anh ấy hoàn toàn trái ngược với những gì bạn trả lời.

Để tránh xác nhận này, bạn chỉ cần chạy lệnh cp với đường dẫn tuyệt đối, nó sẽ tránh bí danh.

/ bin / cp đích nguồn


2

Nếu bạn muốn giữ bí danh ở cấp độ toàn cầu và chỉ muốn thay đổi cho tập lệnh của mình.

Chỉ dùng:

bí danh cp = cp

và sau đó viết các lệnh theo dõi của bạn.


0

Tôi chỉ đơn giản là sử dụng unalias để xóa bí danh "cp -i", sau đó thực hiện sao chép, sau đó đặt lại bí danh. :

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

Không phải mã đẹp nhất, nhưng dễ cài đặt và hiệu quả. Tôi cũng kiểm tra bí danh đã được đặt lại đơn giản

alias |grep cp

-2

Nó không phải là cp -i. Nếu bạn không muốn được yêu cầu xác nhận, đó là cp -n; ví dụ:

cp -n src dest

Hoặc trong trường hợp thư mục / thư mục là:

cp -nr src_dir dest_dir

2
Những người khác nói rằng cp phải đối mặt với cp -ihệ thống được liên kết với hệ thống, có nghĩa là họ đang cố gắng khắc phục mặc định và buộc ghi đè. Có vẻ như bạn có thể đã nhầm lẫn rằng vì là cú pháp được đề xuất, nhưng -nsẽ ngăn chặn ghi đè.
Giỏ hàng bị bỏ rơi
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.