วิธีการบังคับให้ cp เขียนทับโดยไม่มีการยืนยัน


667

ฉันพยายามใช้cpคำสั่งและบังคับให้เขียนทับ

ฉันพยายามcp -rf /foo/* /barแล้ว แต่ฉันยังคงได้รับแจ้งให้ยืนยันการเขียนทับแต่ละครั้ง

คำตอบ:


1112

คุณสามารถทำได้yes | cp -rf xxx yyyแต่ gutfeeling ของฉันบอกว่าถ้าคุณทำมันเป็นราก - คุณ.bashrcหรือ.profileมีนามแฝงของcpการcp -iระบบที่ทันสมัยที่สุด (ส่วนใหญ่ RH-อนุพันธ์) ทำแบบนั้นกับโปรไฟล์ราก

คุณสามารถตรวจสอบนามแฝงที่มีอยู่โดยการทำงานaliasที่พร้อมรับคำสั่งหรือการตรวจสอบนามแฝงเฉพาะสำหรับwhich cpcp

หากคุณมีนามแฝงที่กำหนดไว้การรันunalias cpจะยกเลิกสิ่งนั้นสำหรับเซสชันปัจจุบันมิฉะนั้นคุณสามารถลบออกจากโปรไฟล์เชลล์ของคุณได้

คุณสามารถข้ามนามแฝงชั่วคราวและใช้เวอร์ชันที่ไม่ใช่นามแฝงของคำสั่งโดยนำหน้าด้วยนามแฝง\เช่น\cp whatever


3
นอกจากนี้โปรดระวัง - แม้ว่า alias จะไม่ได้เขียนโดยตรงใน. bashrc หากมีสิ่งอื่นใดที่ไฟล์นี้เรียกท้ายเรียกอย่างอื่นที่จัดการนามแฝงสำหรับ cp คุณจะพบกับพฤติกรรมนี้
Jon

4
โดย "ระบบที่ทันสมัย" เขาหมายถึง RHEL / centos / fedora และบางทีอาจเป็นอย่างอื่น Debian / Ubuntu ไม่ได้ใช้นามแฝง cp ฉันชอบ RHEL บนเซิร์ฟเวอร์และใช้ Fedora เป็นเวลาเกือบสิบปี แต่การสนับสนุนชุมชนของ Ubuntu และการเปลี่ยนกลับไปใช้ Gnome ทำให้ฉันเศร้าหลังจาก Nvidia ฆ่า Fedora ที่ติดตั้ง ฉัน¯\_(ツ)_/¯เกี่ยวกับมัน
Ray Foss

2
@RayFoss เพิ่ม(primarily RH-derivatives)คำพูด :)
favoretti

หลังจากที่ทำและคัดลอกสิ่งที่คุณต้องการที่จะคัดลอกคุณสามารถตั้งค่านามแฝงกลับไปเริ่มต้นด้วยการทำunalias cp alias cp='cp -i'หลังจากนั้นให้เรียกใช้alias cpเพื่อให้คุณสามารถยืนยันได้ว่าเป็นชื่อแทนค่าเริ่มต้น
jaxarroyo

287

นี่อาจเกิดจากcpการเป็นนามแฝงกับสิ่งที่ชอบcp -iอยู่แล้ว การโทรcpโดยตรงควรทำงาน:

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

อีกวิธีในการหลีกเลี่ยงปัญหานี้คือการใช้yesคำสั่ง:

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

6
ใช่ฉันทำ unalias cp -i ตอนนี้มันใช้งานได้แล้วขอบคุณสำหรับการตอบกลับที่มีค่าของคุณ
thiyagu114

5
ฉันรักที่ยูนิกซ์ให้yesคำสั่ง เฮฮา. สักวันหนึ่งฉันอาจใช้มัน
Matthew Leingang

3
ใช่มันเป็นนามแฝงจับดี :) คุณสามารถใช้ \ cp เพื่อเรียก cp ดั้งเดิมได้ง่ายกว่าจดจำเส้นทาง / bin / cp
Hugo Zaragoza

ใช่นั่นเป็นวิธีอื่นในการข้ามนามแฝง เป็นการแฮ็คที่เรียบร้อย!
pgl

1
วิธีนี้ปลอดภัยกว่า
plusmancn

115

เป็นบางส่วนของคำตอบอื่น ๆ ได้กล่าวคุณอาจใช้นามแฝงที่ไหนสักแห่งซึ่งแผนที่cpจะcp -iหรือสิ่งที่คล้ายกัน คุณสามารถเรียกใช้คำสั่งโดยไม่มีนามแฝงใด ๆ โดยนำหน้าด้วยแบ็กสแลช ในกรณีของคุณลอง

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

เครื่องหมายชั่วคราวจะปิดการใช้นามแฝงใด ๆ cpที่คุณได้เรียกว่า


2
@zhouji แบคแลชปิดใช้งานชื่อแทนตามที่ระบุในคำตอบของฉัน ดังนั้นแทนที่จะเรียกใช้นามแฝงcp, จะเรียกคำสั่ง\cp ปรากฏขึ้นนี้จะเทียบเท่าของการทำงานcp command cp
Chris

66

คุณอาจมีนามแฝงอยู่ที่ไหนสักแห่งทำแผนที่cpเพื่อcp -i; เพราะด้วยการตั้งค่าเริ่มต้นcpจะไม่ขอให้เขียนทับ ตรวจสอบของ.bashrcคุณ.profileฯลฯ

ดูcp manpage : เฉพาะเมื่อ-iมีการระบุพารามิเตอร์เท่านั้นที่จะcpแจ้งให้ทราบก่อนทำการเขียนทับ

คุณสามารถตรวจสอบสิ่งนี้ผ่านaliasคำสั่ง:

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

หากต้องการยกเลิกการกำหนดนามแฝงให้ใช้:

$ unalias cp

ใช่ฉันทำ unalias cp -i ตอนนี้มันใช้งานได้แล้วขอบคุณสำหรับการตอบกลับที่มีค่าของคุณ
thiyagu114

1
เป็นเพียง "unalias cp"
Krv Perera

49

ตามคำตอบอื่น ๆ ที่ระบุไว้สิ่งนี้อาจเกิดขึ้นได้หากcpเป็นนามแฝงcp -iเป็นนามแฝงของ

คุณสามารถผนวก\ก่อนที่cpคำสั่งที่จะใช้มันโดยไม่ต้องนามแฝง

\cp -fR source target

1
อย่างที่คุณพูดคนอื่น ๆ ได้กล่าวมาแล้ว ทำไมถึงได้รับ 45 upvotes?
phil294

@ phil294 ฉันเดาว่านี่เป็นวิธีที่ง่ายที่สุดโดยไม่ต้องแก้ไขนามแฝงหรือลบชื่อแทน cp ซึ่งอาจเป็นประโยชน์สำหรับประเพณีอื่น ๆ `` มันมีประโยชน์มากที่นี่
Arnold Roa

18

โดยค่าเริ่มต้นcpมี aliase cp -iไป คุณสามารถตรวจสอบพิมพ์aliasและคุณสามารถเห็นบางอย่างเช่น:

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'

เพื่อแก้ปัญหานี้เพียงใช้/bin/cp /from /toคำสั่งแทนcp /from /to


9

คุณสามารถใช้คำสั่งนี้เช่นกัน:

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

มันจะอัปเดตไฟล์ที่มีอยู่ของคุณด้วยไฟล์ใหม่กว่า


8

cp มักจะเป็นนามแฝงเช่นนี้

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

หากคุณแน่ใจว่าต้องการเขียนทับให้ใช้สิ่งนี้:

/bin/cp <arguments here> src dest


7

ดังนั้นฉันจึงพบเจอสิ่งนี้มากมายเพราะฉันทำซีพีcp -ivแทนและฉันก็พบว่ามีเล่ห์เหลี่ยม ปรากฎว่าในขณะที่-iและ-nทั้งคู่ยกเลิกคำสั่งเขียนทับก่อนหน้านี้-fไม่ได้ แต่ถ้าคุณใช้มันจะเพิ่มความสามารถในการล้าง-nf -iดังนั้น:

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

ค่อนข้างเรียบร้อยเหรอ? / necropost



5

อีกวิธีในการเรียกคำสั่งที่ไม่มีนามแฝงคือใช้commandbuiltin in bash

command cp -rf /zzz/zzz/*


4

-n คือ "ไม่เขียนทับ" แต่คำถามของเขาตรงกันข้ามกับสิ่งที่คุณตอบกลับ

เพื่อหลีกเลี่ยงการยืนยันนี้คุณสามารถเรียกใช้คำสั่ง cp โดยใช้พา ธ สัมบูรณ์ซึ่งจะหลีกเลี่ยงนามแฝง

ปลายทาง / bin / cp sourcefile


2

หากคุณต้องการให้นามแฝงอยู่ในระดับโลกตามที่เป็นอยู่และเพียงต้องการเปลี่ยนสคริปต์ของคุณ

เพียงใช้:

นามแฝง cp = cp

จากนั้นเขียนคำสั่งการติดตามของคุณ


0

ฉันเพียงแค่ใช้ unalias เพื่อลบนามแฝง "cp -i" จากนั้นทำสำเนาจากนั้นตั้งค่านามแฝงกลับ :

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

ไม่ใช่รหัสที่สวยที่สุด แต่ติดตั้งง่ายและมีประสิทธิภาพ ฉันยังตรวจสอบนามแฝงที่มีอยู่แล้วตั้งกลับด้วยง่าย

alias |grep cp

-2

cp -iมันไม่ได้เป็น หากคุณไม่ต้องการที่จะถามเพื่อยืนยันให้มันเป็นcp -n; ตัวอย่างเช่น:

cp -n src dest

หรือในกรณีของไดเรกทอรี / โฟลเดอร์คือ:

cp -nr src_dir dest_dir

2
คนอื่น ๆ ระบุว่า cp ที่ผู้ใช้พบเจอนั้นเชื่อมโยงกับcp -iระบบซึ่งหมายความว่าพวกเขาพยายามที่จะเอาชนะค่าเริ่มต้นและบังคับให้เขียนทับ ดูเหมือนว่าคุณอาจสับสนว่าเป็นไวยากรณ์ที่แนะนำ แต่-nจะป้องกันการเขียนทับ
รถเข็นที่ถูกทิ้งร้าง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.