cpコマンドで毎回上書きを尋ねられる
Linuxなどでコマンドを打っているときに、cpコマンドでコピーするんですが、コピーするファイルを全て上書きしたいときってありますよね。
そんな時に・・・
$ ls
test test1 test2 test3 test4 test_dir
$ cp test? test_dir
cp: overwrite ‘test_dir/test1’?
cp: overwrite ‘test_dir/test2’?
cp: overwrite ‘test_dir/test3’?
cp: overwrite ‘test_dir/test4’?
※test_dirはディレクトリ、そのほかはファイルです。
りょーへー
いやいや。毎回上書きするかどうか聞かんでもええし!
まぁ rmコマンドの時みたいに-f つけたらいけるやろ。
$ cp -f test? test_dir
cp: overwrite ‘test_dir/test1’?
cp: overwrite ‘test_dir/test2’?
cp: overwrite ‘test_dir/test3’?
cp: overwrite ‘test_dir/test4’?
りょーへー
な、なんでや・・・・
とりょーへーみたいになった人、いますよね?
alias がついているのが原因
ディストリビューションにもよりますが、cpコマンドには初めからaliasがつけられています。
alias コマンドでcpを調べるとわかります。
$ alias cp alias cp='cp -i'
つまりcpコマンドには -i オプションが常につけられていることになります。
-i オプションは上書きの前に確認しますよーってやつなんです。
なので、cpコマンドを叩くと-iが自動的に付加され、-fを付けても-iオプションの方が勝ってしまうので、どうやっても上書きを尋ねられます。
aliasを無視する方法
りょーへー
じゃあそのaliasを削除すればええんか?
いやいや、そこまでする必要はありません。
ちゃんとaliasを無視できるような打ち方があります。
$ \cp -f test? test_dir
$
そうです。cpコマンドの前でエスケープすればいいだけです)
エスケープは\(または / )でできますよ。
もちろんcpコマンド以外でもaliasを無視したい場合はエスケープすればaliasがついているコマンドでも使えます。
結論
aliasを無視したいときはエスケープしよう!!
リンク