cp -f tidak bisa menimpa cp -i alias

8

Di file /home/user/.bashrc saya, saya memiliki alias untuk mencegah kesalahan:

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

Jika saya benar-benar yakin dengan apa yang saya lakukan, saya bisa menimpa rmdan mvalias menggunakan rm -fatau mv -f, itu tidak akan bertanya apakah saya benar-benar ingin menimpa file.

Masalahnya, itu tidak berfungsi untuk cpperintah, menggunakan cp -fmasih akan bertanya kepada saya.

Apakah ini normal? Apa yang harus saya lakukan untuk memiliki cp -ialias secara default dan dapat menggunakan cp -fperintah juga?

Saya menggunakan Debian Wheezy 64bit.

baptx
sumber

Jawaban:

9

Sementara itu -fberarti memaksa pada mereka semua, karena cp, itu berarti memaksa dengan mencoba untuk menghapus tujuan pertama jika tujuan tidak dapat diperbarui .

Untuk mvdan rm, -fhanya mengganti -i. Tetapi untuk cp, itu mengubah perilaku utilitas, -fbukan kebalikan dari -ikasus itu, cp -i -fmasuk akal dan berarti, jika target ada, tanyakan pengguna dan jika tidak dapat diganti, hapus dulu .

Bahkan untuk mvdan rm, menambahkan -ftidak sama dengan menghapus -iketika datang ke pesan peringatan dan kesalahan yang dikirim ke pengguna. Misalnya rm non-existent-fileakan melaporkan kesalahan sementara rm -i -f non-existent-filetidak.

Seperti yang telah disebutkan, untuk menghapus efek -i, alih-alih menambahkan -f, Anda harus menonaktifkan alias menggunakan salah satu solusi yang disediakan.

Stéphane Chazelas
sumber
"Untuk mv dan cp, -f hanya menimpa -i." Maksudmu mv dan rm kurasa. Terima kasih telah menjelaskan, sangat jelas bagi saya sekarang!
baptx
11

Dengan memberi cp -f, opsi hanya menambahkan dengan opsi yang ada.

Artinya, jika Anda memiliki alias cp='cp -i', kata cp akan diganti dalam perintah cp -f, jadi Anda dapatkan cp -i -f file1 file2.

Untuk mengganti alias:

\cp -f file1 file2

Garis miring terbalik sebelum perintah akan menonaktifkan alias. Anda dapat menggunakannya command cpsebagai ganti \cpuntuk keterbacaan.

Guru
sumber
Saya membuat kesalahan dalam posting saya, ketika saya berbicara tentang cp -r, maksud saya cp -f, itu diperbaiki. Solusi Anda dengan backslash berfungsi, terima kasih! Tapi saya masih tidak mengerti mengapa backslash tidak diperlukan untuk perintah mv atau rm, alias dinonaktifkan langsung dengan mv -f dan rm -f!
baptx