確認なしでCPを強制的に上書きする方法


668

cpコマンドを使用して強制的に上書きしようとしています。

を試しましたがcp -rf /foo/* /bar、各上書きを確認するように求められます。

回答:


1113

あなたが行うことができますyes | cp -rf xxx yyyが、私のgutfeelingは、rootとしてそれを行う場合と言う-あなた.bashrc.profileの別名があるcpのをcp -i、最も近代的なシステム(主にRH-誘導体)は、ルートプロファイルにそれを行います。

aliasコマンドプロンプトで実行して既存のエイリアスを確認するかwhich cp、のエイリアスのみを確認できますcp

エイリアスを定義している場合は、実行unalias cpすると現在のセッションのエイリアスが廃止されます。それ以外の場合は、エイリアスをシェルプロファイルから削除できます。

あなたは一時的にエイリアスバイパスして、それを付けることによって、コマンドの非エイリアスのバージョンを使用することができ\、例えば\cp whatever


3
また、注意が必要です。別名が.bashrcに直接書き込まれていなくて、このファイルが他に呼び出すと、cpの別名を操作する別のものが呼び出されて、この動作が発生します。
Jon

4
「最新のシステム」とは、RHEL / centos / fedoraを意味し、おそらく別の意味で、Debian / Ubuntuはcpをエイリアスしません。私はサーバーでRHELを好み、Fedoraを10年近く使用しましたが、UbuntuのコミュニティサポートとGnomeへの切り替えにより、NvidiaがFedoraのインストールを終了した後、私はうなずきました。私は¯\_(ツ)_/¯それについてです。
Ray Foss

2
@RayFossがコメントを追加しました(primarily RH-derivatives):)
お気に入り

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
UNIXがyesコマンドを提供するのが大好きです。陽気な、こっけいな。そしていつか私はそれを使うかもしれません。
マシューLeingang 2013

3
はい、それはエイリアスされました、素晴らしいキャッチ:)パスを覚えるよりも簡単に元のcpを呼び出すために\ cpを使用できます
Hugo Zaragoza

はい、それはエイリアスをバイパスする別の方法です。一種のきちんとしたハック!
pgl 2015年

1
この方法はより安全です。
plusmancn 2016

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のマンページを参照してください。-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ます。

コマンドの\前にaを追加して、cpエイリアスなしで使用できます。

\cp -fR source target

1
あなたが言ったように、他の人はすでにこれを述べています。なぜこれが45票を獲得したのですか?
phil294

@ phil294これは、エイリアスを変更したり、cpエイリアスを削除したりせずに最も簡単な方法だと思います。これは、他の用途に役立つ場合があります。``ここでとても便利です。
アーノルドロア

18

デフォルトでcpはにエイリアスがあり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のエイリアスをにしておいたので、これに何度も遭遇しcp -iv、きちんとしたトリックを見つけました。それはしばらくことが判明した-i-n、両方が前の上書きディレクティブをキャンセル-fしません。ただし、これを使用する-nfと、をクリアする機能が追加されます-i。そう:

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

かなりきちんとね?/ necropost




4

-nは「上書きしない」ですが、彼の質問はあなたが答えたものとは正反対です。

この確認を回避するには、絶対パスを指定してcpコマンドを実行するだけでよく、エイリアスは回避されます。

/ bin / cpソースファイルの宛先


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.