Как заставить cp перезаписать без подтверждения - PullRequest
568 голосов
/ 13 декабря 2011

Я пытаюсь использовать команду cp и принудительно перезаписать.

Я пробовал cp -rf /foo/* /bar, но мне все равно предлагается подтвердить каждую перезапись.

Ответы [ 15 ]

984 голосов
/ 13 декабря 2011

Вы можете сделать yes | cp -rf xxx yyy, но моя интуиция говорит, что если вы делаете это как root - ваш .bashrc или .profile имеет псевдоним от cp до cp -i, большинство современных систем (в основном RH-производные)) сделать это для корневых профилей.

Вы можете проверить существующие псевдонимы, запустив alias в командной строке или which cp, чтобы проверить псевдонимы только для cp.

Если у вас определен псевдоним, запустите unalias cp отменит это для текущего сеанса, в противном случае вы можете просто удалить его из своего профиля оболочки.

Вы можете временно обойти псевдоним и использовать версию без псевдонима команды, поставив перед ней префикс \Например, \cp whatever

249 голосов
/ 13 декабря 2011

Это, вероятно, вызвано тем, что cp уже имеет псевдоним что-то вроде cp -i. Звонок cp напрямую должен работать:

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

Еще один способ обойти это - использовать команду yes:

yes | cp -rf /zzz/zzz/* /xxx/xxx
104 голосов
/ 13 декабря 2011

Как уже говорилось в некоторых других ответах, вы, вероятно, где-то используете псевдоним, который отображает cp в cp -i или что-то подобное. Вы можете запустить команду без псевдонимов, поставив перед ней обратную косую черту. В вашем случае попробуйте

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

Обратная косая черта временно отключит любые псевдонимы, которые вы назвали cp.

53 голосов
/ 13 декабря 2011

Возможно, у вас где-то есть псевдоним, отображающий cp в cp -i;потому что с настройками по умолчанию cp не попросит перезаписать.Проверьте .bashrc, .profile и т. Д.

См. cp manpage : только когда указан параметр -i, cp будет фактически запрашивать перед перезаписью.

Вы можете проверить это с помощью команды alias:

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

Чтобы отменить определение псевдонима, используйте:

$ unalias cp
42 голосов
/ 29 июля 2016

Как уже говорилось в других ответах, это может произойти, если cp является псевдонимом cp -i.

Вы можете добавить \ перед командой cp, чтобы использовать ее без псевдонима.

\cp -fR source target
18 голосов
/ 13 мая 2013

По умолчанию 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

7 голосов
/ 13 апреля 2018
cp -u ...
cp --update ...

тоже работает.

7 голосов
/ 22 июня 2015

cp обычно так псевдоним

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

, если вы уверены, что хотите сделать перезапись, используйте это:

/bin/cp <arguments here> src dest
5 голосов
/ 13 ноября 2018

Я нашел это

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

Источник: https://superuser.com/questions/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851

5 голосов
/ 10 июля 2014

Другой способ вызова команды без псевдонима - использовать встроенный в bash command.

command cp -rf /zzz/zzz/*

...