Cara memaksa cp untuk menimpa tanpa konfirmasi

668

Saya mencoba menggunakan cpperintah dan memaksa menimpa.

Saya sudah mencoba cp -rf /foo/* /bar, tetapi saya masih diminta untuk mengkonfirmasi setiap overwrite.

thiyagu114
sumber

Jawaban:

1113

Anda dapat melakukan yes | cp -rf xxx yyy, tapi gutfeeling saya mengatakan bahwa jika Anda melakukannya sebagai root - Anda .bashrcatau .profilememiliki alias cpuntuk cp -i, sistem yang paling modern (terutama RH-derivatif) melakukan itu untuk profil root.

Anda dapat memeriksa alias yang ada dengan menjalankan aliaspada prompt perintah, atau which cpuntuk memeriksa alias saja cp.

Jika Anda memiliki alias yang ditentukan, menjalankan unalias cpakan menghapusnya untuk sesi saat ini, jika tidak Anda bisa menghapusnya dari profil shell Anda.

Anda dapat mem-bypass alias untuk sementara dan menggunakan versi non-alias dari sebuah perintah dengan mengawalinya dengan \, misalnya\cp whatever

favoretti
sumber
3
Juga, berhati-hatilah - bahkan jika alias tidak secara langsung ditulis dalam .bashrc, jika hal lain yang dipanggil file ini akhirnya memanggil sesuatu yang lain yang memanipulasi alias untuk cp, Anda akan mengalami perilaku ini.
Jon
4
Dengan "sistem modern" yang dia maksud adalah RHEL / centos / fedora dan mungkin sesuatu yang lain, Debian / Ubuntu tidak alias cp. Saya lebih suka RHEL di server dan menggunakan Fedora selama hampir satu dekade, tetapi dukungan komunitas Ubuntu dan beralih kembali ke Gnome membujuk saya setelah Nvidia membunuh instal Fedora saya. Saya ¯\_(ツ)_/¯tentang itu.
Ray Foss
2
@RayFoss Menambahkan (primarily RH-derivatives)komentar :)
favoretti
setelah melakukan unalias cpdan menyalin apa pun yang perlu Anda salin, Anda dapat mengatur alias kembali ke default dengan melakukan alias cp='cp -i'. Setelah itu, jalankan alias cpsehingga Anda dapat memverifikasi bahwa itu kembali ke alias default.
jaxarroyo
287

Ini mungkin disebabkan oleh cpkarena sudah alias cp -i. Panggilan cplangsung harus bekerja:

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

Cara lain untuk menyiasatinya adalah dengan menggunakan yesperintah:

yes | cp -rf /zzz/zzz/* /xxx/xxx
hal
sumber
6
ya, saya melakukan unalias cp -i, sekarang berfungsi .. Terima kasih atas balasan Anda yang berharga.
thiyagu114
5
Saya suka bahwa unix menyediakan yesperintah. Lucu sekali. Dan suatu hari nanti saya dapat menggunakannya.
Matthew Leingang
3
ya itu alias, tangkapan bagus :) Anda dapat menggunakan \ cp untuk memanggil cp asli, lebih mudah daripada mengingat jalan / bin / cp
Hugo Zaragoza
Yap, itu cara lain untuk memotong alias. Semacam retas yang rapi!
pgl
1
Cara ini lebih aman.
plusmancn
115

Seperti beberapa jawaban lain telah menyatakan, Anda mungkin menggunakan suatu tempat alias yang memetakan cpke cp -iatau sesuatu yang serupa. Anda dapat menjalankan perintah tanpa alias dengan mendahuluinya dengan garis miring terbalik. Dalam kasus Anda, cobalah

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

Backslash akan menonaktifkan sementara alias apa pun yang Anda panggil cp.

Chris
sumber
2
@zhouji Backlash menonaktifkan alias, seperti yang dinyatakan dalam jawaban saya. Jadi alih-alih memanggil alias cp, \cpakan memanggil perintah cp. Ini tampaknya setara dengan berjalan command cp.
Chris
66

Anda mungkin memiliki alias di suatu tempat, memetakan cpke cp -i; karena dengan pengaturan default, cptidak akan meminta untuk menimpa. Periksa .bashrc, .profiledll.

Lihat halaman manual : Hanya ketika -iparameter ditentukan akan cpbenar - benar meminta sebelum menimpa.

Anda dapat memeriksa ini melalui aliasperintah:

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

Untuk membatalkan definisi alias, gunakan:

$ unalias cp
pembuatan kode
sumber
ya, saya melakukan unalias cp -i, sekarang berfungsi .. Terima kasih atas balasan Anda yang berharga.
thiyagu114
1
itu hanya "unalias cp"
Krv Perera
49

Seperti jawaban lain telah menyatakan, ini bisa terjadi jika cpalias cp -i.

Anda dapat menambahkan \sebelum cpperintah untuk menggunakannya tanpa alias.

\cp -fR source target
Arnold Roa
sumber
1
Seperti yang Anda katakan, orang lain sudah menyatakan ini. Mengapa ini mendapatkan 45 upvotes?
phil294
@ phil294 Saya kira ini adalah cara termudah tanpa memodifikasi alias atau menghapus cp alias yang mungkin berguna untuk penggunaan lainnya. `` Sangat berguna di sini.
Arnold Roa
18

Secara default cpalias cp -i. Anda dapat memeriksanya, mengetik aliasdan Anda dapat melihat beberapa seperti:

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'

Untuk mengatasi masalah ini, gunakan saja /bin/cp /from /toperintahcp /from /to

Avseiytsev Dmitriy
sumber
9

Anda dapat menggunakan perintah ini juga:

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

itu akan memperbarui file yang ada dengan yang lebih baru.

sigeje
sumber
8

cp biasanya alias seperti ini

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

jika Anda yakin ingin melakukan overwrite maka gunakan ini:

/bin/cp <arguments here> src dest
pengguna5035029
sumber
7

Jadi saya sering mengalami ini karena saya terus cp alias cp -iv, dan saya menemukan trik yang rapi. Ternyata sementara -idan -nkeduanya membatalkan arahan menimpa sebelumnya, -ftidak. Namun, jika Anda menggunakannya -nfmenambah kemampuan untuk menghapus -i. Begitu:

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

Cukup rapi ya? / necropost

Adam McCormick
sumber
6
cp -u ...
cp --update ...

juga berfungsi.

softwarevamp
sumber
5

Cara lain untuk memanggil perintah tanpa alias adalah dengan menggunakan commandbuiltin di bash.

command cp -rf /zzz/zzz/*

Steve Buzonas
sumber
4

-n adalah "tidak menimpa" tetapi pertanyaannya benar-benar berlawanan dengan apa yang Anda jawab.

Untuk menghindari konfirmasi ini, Anda cukup menjalankan perintah cp dengan path absolut, itu akan menghindari alias.

/ bin / cp sourcefile tujuan

Rohit Rajput
sumber
2

Jika Anda ingin menjaga alias di tingkat global apa adanya dan hanya ingin mengubah untuk skrip Anda.

Cukup gunakan:

alias cp = cp

dan kemudian tulis perintah tindak lanjut Anda.

Ankit Bhatnagar
sumber
0

Saya hanya menggunakan unalias untuk menghapus alias "cp -i", lalu menyalin, lalu mengatur kembali alias. :

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

Bukan kode yang paling indah, tetapi mudah diatur dan efisien. Saya juga periksa alias sudah diatur kembali dengan sederhana

alias |grep cp
Maat
sumber
-2

Bukan itu cp -i. Jika Anda tidak ingin dimintai konfirmasi, itu adalah cp -n; sebagai contoh:

cp -n src dest

Atau dalam hal direktori / folder adalah:

cp -nr src_dir dest_dir
mihaitzateo
sumber
2
Yang lain menyatakan bahwa cp yang menghadap pengguna disinkronkan cp -ioleh sistem, yang berarti mereka mencoba untuk mengatasi default dan memaksa menimpa. Sepertinya Anda mungkin bingung karena menjadi sintaks yang disarankan, tetapi -nakan mencegah penulisan ulang .
Abandoned Cart