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 .bashrc or .profile has an alias of cp to 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 cp.
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 \, e.g. \cp whatever
¯\_(ツ)_/¯ about it.(primarily RH-derivatives) remark :)unalias cp and copying whatever you need to copy, you can set alias back to its default by doing alias cp='cp -i'. After which, run alias cp so you can verifiy that it's back to default alias.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 command:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes command. Hilarious. And someday I may use it.\cpAs some of the other answers have stated, you probably use an alias somewhere which maps cp to 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 cp.
cp, \cp will invoke the command cp. This appears to be the equivalent of running command cp.You probably have an alias somewhere, mapping cp to cp -i; because with the default settings, cp won't ask to overwrite. Check your .bashrc, your .profile etc.
See cp manpage: Only when -i parameter is specified will cp actually prompt before overwriting.
You can check this via the alias command:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
To permanently remove the alias, check in which file the alias is defined (.bashrc, .profile, etc., for details see the documentation of the shell you use); then remove the according line from the file, and start a new shell.
To undefine the alias for an existing shell session, use:
$ unalias cp
To temporarily use the unaliased version of cp for a single command execution, you can prefix it with \, like so:
$ \cp -rf /foo/* /bar
\cp -f file.txt overwritten.txt. I tend to want to maintain the alias for day-to-day usage, but in certain functions and aliases, I may want to overwrite the behavior.\cp appeared to do the same as zsh in bash (on RockyLinux 9). Thx.As other answers have stated, this could happend if cp is an alias of cp -i.
You can append a \ before the cp command to use it without alias.
\cp -fR source target
So I run into this a lot because I keep cp aliased to cp -iv, and I found a neat trick. It turns out that while -i and -n both cancel previous overwrite directives, -f does not. However, if you use -nf it adds the ability to clear the -i. So:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Pretty neat huh? /necropost
-f doesn't force an overwrite? If so I would expect a permissions issue. The point of OP was to clear the effect of the -i directive making the removal not interactive.*user@pc-1250* /tmp/ttt: cp -f -- a/* b/ cp: overwrite 'b/0'? . If i call it with -nf it won't ask for overwrite and won't overwrite (only copies missing files)cp command on my mac. They explicitly ignore -f when -n is used according to gnu.org/software/coreutils/manual/coreutils.html#cp-invocation you might try --remove-destination instead of -fBy default 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
I found this
'cp' -rf * /data/danalonso_testing/target/
cp -rf source/source_file.ext target/target_file.extFor me, the simpler the better. This way does not show STDOUT:
yes | cp -rf source destination >/dev/null 2>&1
It is not cp -i. If you do not want to be asked for confirmation,
it is cp -n; for example:
cp -n src dest
Or in case of directories/folders is:
cp -nr src_dir dest_dir
cp -i by the system, meaning they were trying to overcome the default and force an overwrite. It sounds like you may have confused that for being the suggested syntax, but -n will prevent an overwrite.