How to force cp to overwrite without confirmation
I'm trying to use the
cp command and force an overwrite.
I have tried
cp -rf /foo/* /bar, but I am still prompted to confirm each overwrite.
You can do
yes | cp -rf xxx yyy, but my gutfeeling says that if you do it as root - your
.profile has an alias of
cp -i, most modern systems (primarily RH-derivatives) do that to root profiles.
You can check existing aliases by running
alias at the command prompt, or
which cp to check aliases only for
If you do have an alias defined, running
unalias cp will abolish that for the current session, otherwise you can just remove it from your shell profile.
You can temporarily bypass an alias and use the non-aliased version of a command by prefixing it with
Read more... Read less...
This is probably caused by
cp being already aliased to something like
cp -i. Calling
cp directly should work:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Another way to get around this is to use the
yes | cp -rf /zzz/zzz/* /xxx/xxx
As some of the other answers have stated, you probably use an alias somewhere which maps
cp -i or something similar. You can run a command without any aliases by preceding it with a backslash. In your case, try
\cp -r /zzz/zzz/* /xxx/xxx
The backslash will temporarily disable any aliases you have called
You probably have an alias somewhere, mapping
cp -i; because with the default settings,
cp won't ask to overwrite. Check your
See cp manpage: Only when
-i parameter is specified will
cp actually prompt before overwriting.
You can check this via the
$ alias alias cp='cp -i' alias diff='diff -u' ....
To undefine the alias, use:
$ unalias cp
As other answers have stated, this could happend if
cp is an alias of
You can append a
\ before the
cp command to use it without alias.
\cp -fR source target
cp has aliase to
cp -i. You can check it, type
alias and you can see some like:
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'
To solve this problem just use
/bin/cp /from /to command instead
cp /from /to