Как заставить cp перезаписать без подтверждения

668

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

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

thiyagu114
источник

Ответы:

1113

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

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

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

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

favoretti
источник
3
Кроме того, будьте осторожны - даже если псевдоним не записан напрямую в .bashrc, если все, что вызывает этот файл, вызывает что-то еще, что манипулирует псевдонимом для cp, вы столкнетесь с этим поведением.
Jon
4
Под «современными системами» он подразумевает RHEL / centos / fedora и, возможно, что-то еще, Debian / Ubuntu не имеет псевдоним cp. Я предпочитаю RHEL на сервере и использовал Fedora в течение почти десятилетия, но поддержка сообщества Ubuntu и переход на Gnome привели меня в чувство после того, как Nvidia остановила мою установку Fedora. Я ¯\_(ツ)_/¯об этом.
Рэй Фосс
2
@RayFoss Добавил (primarily RH-derivatives)замечание :)
favoretti
выполнив unalias cpи скопировав все, что вам нужно скопировать, вы можете сделать псевдоним обратно по умолчанию, выполнив alias cp='cp -i'. После этого запустите, alias cpчтобы убедиться, что он вернулся к псевдониму по умолчанию.
Джаксарройо
287

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

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

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

yes | cp -rf /zzz/zzz/* /xxx/xxx
PGL
источник
6
да, я сделал unalias cp -i, теперь он работает .. Спасибо за ваш ценный ответ.
thiyagu114
5
Мне нравится, что Unix предоставляет yesкоманду. Веселое. И когда-нибудь я могу использовать это.
Мэтью Лейнган,
3
да, это был псевдоним, хороший улов :) Вы можете использовать \ cp для вызова оригинального cp, проще, чем запоминать путь / bin / cp
Уго Сарагоса
Да, это еще один способ обойти псевдоним. Вид аккуратного взлома!
пгл
1
Этот способ более безопасен.
plusmancn
115

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

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

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

Крис
источник
2
@zhouji Обратная реакция отключает псевдоним, как указано в моем ответе. Таким образом, вместо вызова псевдонима cp, \cpбудет вызывать команду cp. Это похоже на бег command cp.
Крис
66

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

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

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

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

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

$ unalias cp
codeling
источник
да, я сделал unalias cp -i, теперь он работает .. Спасибо за ваш ценный ответ.
thiyagu114
1
это просто "Unalias CP"
Крв Перера
49

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

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

\cp -fR source target
Арнольд Роа
источник
1
Как вы сказали, другие уже заявили об этом. Почему это получило 45 голосов?
phil294
@ phil294 Думаю, это самый простой способ без изменения псевдонима или удаления псевдонима cp, который может быть полезен для других целей. `` Это очень полезно здесь.
Арнольд Роа
18

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

Авсейцев Дмитрий
источник
9

Вы также можете использовать эту команду:

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

это обновит существующий файл новым.

sigeje
источник
8

cp как правило, так псевдоним

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

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

/bin/cp <arguments here> src dest
user5035029
источник
7

Так что я часто сталкиваюсь с этим, потому что я сохраняю псевдоним cp cp -iv, и я нашел хитрый трюк. Оказывается, что и то -iи -nдругое отменяет предыдущие директивы перезаписи, -fно не отменяет. Тем не менее, если вы используете -nfэто добавляет возможность очистить -i. Так:

cp -f /foo/* /bar  <-- Prompt
cp -nf /foo/* /bar <-- No Prompt

Довольно аккуратно, да? / necropost

Адам Маккормик
источник
6
cp -u ...
cp --update ...

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

softwarevamp
источник
5

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

command cp -rf /zzz/zzz/*

Стив Бузонас
источник
4

-n "не перезаписать", но его вопрос полностью противоположен тому, на что вы ответили.

Чтобы избежать этого подтверждения, вы можете просто запустить команду cp с абсолютным путем, это позволит избежать псевдонима.

/ bin / cp исходный файл

Рохит Раджпут
источник
2

Если вы хотите сохранить псевдоним на глобальном уровне, как есть, и просто хотите изменить свой сценарий.

Просто используйте:

псевдоним cp = cp

а затем напишите свои последующие команды.

Анкит Бхатнагар
источник
0

Я просто использовал unalias для удаления псевдонима "cp -i", затем сделал копию, затем установил псевдоним. :

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

Не самый красивый код, но простой в установке и эффективный. Я также проверяю, что псевдоним уже установлен с простым

alias |grep cp
Маат
источник
-2

Это не так cp -i. Если вы не хотите, чтобы вас попросили подтвердить, это так cp -n; например:

cp -n src dest

Или в случае каталогов / папок есть:

cp -nr src_dir dest_dir
mihaitzateo
источник
2
Другие утверждали, что система ссылается на пользовательский cp cp -i, что означает, что они пытаются преодолеть значение по умолчанию и вызвать перезапись. Это звучит , как вы , возможно, перепутал , что за то , что предлагаемый синтаксис, но -nбудет предотвратить перезапись.
Заброшенная корзина