web-dev-qa-db-ja.com

確認せずにcpに強制的に上書きさせる方法

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

私はcp -rf /foo/* /barを試しました、しかし私はまだそれぞれの上書きを確認するよう促されます。

545
thiyagu114

あなたはyes | cp -rf xxx yyyをすることができます、しかし私の愚痴はあなたがそれをルートとしてするなら - あなたの.bashrcまたは.profilecpからcp -iへのエイリアスを持っていると言います。

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

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

一時的にエイリアスを迂回して、エイリアスのないバージョンのコマンドに\という接頭辞を付けることで使用できます。 \cp whatever

951
favoretti

これはおそらくcpがすでにcp -iのようなものにエイリアスされていることが原因です。 cpを直接呼び出すことでうまくいくはずです。

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

これを回避する別の方法はyesコマンドを使用することです。

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

他の答えのいくつかが述べたように、あなたはおそらくどこかでcpcp -iまたは類似のものにマッピングするエイリアスを使うでしょう。コマンドの前に円記号を付けることで、別名を付けずにコマンドを実行できます。あなたの場合は、試してみてください

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

バックスラッシュはあなたがcpと呼ぶエイリアスを一時的に無効にします。

101
Chris

cpcp -iにマッピングするエイリアスがおそらくどこかにあります。デフォルト設定では、cpは上書きを要求しないためです。あなたの.bashrc、あなたの.profileなどをチェックしてください。

cp manpage :を参照してください。-iパラメータが指定されている場合のみ、実際にcpが上書きの前に確認を求めます。

これはaliasコマンドで確認できます。

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

別名を未定義にするには、次のようにします。

$ unalias cp
52
codeling

他の答えが述べているように、これはcpcp -iの別名である場合に起こり得る。

cpコマンドの前に\を追加して、別名なしで使用することができます。

\cp -fR source target
41
Arnold Roa

デフォルトでcpcp -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

18

cpは通常このようにエイリアスされています

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

上書きしてもよいと確信している場合は、これを使用します。

/bin/cp <arguments here> src dest
8
user5035029
cp -u ...
cp --update ...

また働きます。

6
softwarevamp

このコマンドも使えます:

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

それはあなたの既存のファイルを新しいもので更新するでしょう。

5
sigeje

別名なしでコマンドを呼び出すもう1つの方法は、bashに組み込まれているcommandを使用することです。

command cp -rf /zzz/zzz/*

4
Steve Buzonas

私はこれを見つけました

'cp' -rf * /data/danalonso_testing/target/

ソース: https://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851

エイリアスをそのままグローバルレベルに保ちたいがスクリプトだけを変更したい場合。

ただ使用してください:

エイリアスcp = cp

その後、フォローアップコマンドを書きます。

2
Ankit Bhatnagar

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

この確認を避けるために、あなたは単に絶対パスでcpコマンドを実行することができます、それは別名を避けます。

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

2
Rohit Rajput

私は単にunaliasを使って "cp -i"エイリアスを削除し、それからコピーをしてからエイリアスを元に戻します。 :

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

最も美しいコードではありませんが、設定が簡単で効率的です。私はまた、エイリアスがすでに単純に戻って設定されていることを確認してください

alias |grep cp
0
Maat