Я пытаюсь использовать cp
команду и принудительно перезаписать.
Я пытался cp -rf /foo/* /bar
, но мне все равно предлагается подтвердить каждую перезапись.
Я пытаюсь использовать cp
команду и принудительно перезаписать.
Я пытался cp -rf /foo/* /bar
, но мне все равно предлагается подтвердить каждую перезапись.
Ответы:
Вы можете сделать yes | cp -rf xxx yyy
, но мой gutfeeling говорит , что если вы делаете это как корень - ваш .bashrc
или .profile
имеет псевдоним cp
для cp -i
, большинство современных систем ( в первую очередь , RH-производные) , которые делают для корневых профилей.
Вы можете проверить существующие псевдонимы, запустив их alias
в командной строке, или which cp
проверить псевдонимы только для cp
.
Если у вас есть определенный псевдоним, запуск unalias cp
отменит его для текущего сеанса, в противном случае вы можете просто удалить его из своего профиля оболочки.
Вы можете временно обойти псевдоним и использовать не псевдоним версии команды, добавив к ней префикс \
, например:\cp whatever
¯\_(ツ)_/¯
об этом.
(primarily RH-derivatives)
замечание :)
unalias cp
и скопировав все, что вам нужно скопировать, вы можете сделать псевдоним обратно по умолчанию, выполнив alias cp='cp -i'
. После этого запустите, alias cp
чтобы убедиться, что он вернулся к псевдониму по умолчанию.
Вероятно, это вызвано тем, cp
что у вас уже есть псевдоним cp -i
. Звонок cp
напрямую должен работать:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Еще один способ обойти это - использовать yes
команду:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
команду. Веселое. И когда-нибудь я могу использовать это.
Как некоторые другие ответы заявили, вы , вероятно , использовать псевдоним где - нибудь , которая отображает cp
на cp -i
или что - то подобное. Вы можете запустить команду без псевдонимов, поставив перед ней обратную косую черту. В вашем случае попробуйте
\cp -r /zzz/zzz/* /xxx/xxx
Обратная косая черта временно отключит любые псевдонимы, которые вы вызвали cp
.
cp
, \cp
будет вызывать команду cp
. Это похоже на бег command cp
.
Возможно, у вас где-то есть псевдоним, который отображается cp
на cp -i
; потому что с настройками по умолчанию, cp
не будет просить перезаписать. Проверьте ваш .bashrc
, ваш .profile
и т. Д.
См. Cp manpage : Только когда -i
задан параметр, будет cp
фактически запрашиваться перед перезаписью.
Вы можете проверить это с помощью alias
команды:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Чтобы определить псевдоним, используйте:
$ unalias cp
Как указали другие ответы, это может произойти, если cp
псевдоним cp -i
.
Вы можете добавить команду \
перед cp
командой, чтобы использовать ее без псевдонима.
\cp -fR source target
По умолчанию 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
cp
как правило, так псевдоним
alias cp='cp -i' # i.e. ask questions of overwriting
если вы уверены, что хотите сделать перезапись, используйте это:
/bin/cp <arguments here> src dest
я нашел это
'cp' -rf * /data/danalonso_testing/target/
Источник: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Так что я часто сталкиваюсь с этим, потому что я сохраняю псевдоним cp cp -iv
, и я нашел хитрый трюк. Оказывается, что и то -i
и -n
другое отменяет предыдущие директивы перезаписи, -f
но не отменяет. Тем не менее, если вы используете -nf
это добавляет возможность очистить -i
. Так:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Довольно аккуратно, да? / necropost
cp -u ...
cp --update ...
тоже работает.
Другой способ вызвать команду без псевдонима - использовать command
встроенную в bash.
command cp -rf /zzz/zzz/*
-n "не перезаписать", но его вопрос полностью противоположен тому, на что вы ответили.
Чтобы избежать этого подтверждения, вы можете просто запустить команду cp с абсолютным путем, это позволит избежать псевдонима.
/ bin / cp исходный файл
Если вы хотите сохранить псевдоним на глобальном уровне, как есть, и просто хотите изменить свой сценарий.
Просто используйте:
псевдоним cp = cp
а затем напишите свои последующие команды.
Я просто использовал unalias для удаления псевдонима "cp -i", затем сделал копию, затем установил псевдоним. :
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
Не самый красивый код, но простой в установке и эффективный. Я также проверяю, что псевдоним уже установлен с простым
alias |grep cp
Это не так cp -i
. Если вы не хотите, чтобы вас попросили подтвердить, это так cp -n
; например:
cp -n src dest
Или в случае каталогов / папок есть:
cp -nr src_dir dest_dir
cp -i
, что означает, что они пытаются преодолеть значение по умолчанию и вызвать перезапись. Это звучит , как вы , возможно, перепутал , что за то , что предлагаемый синтаксис, но -n
будет предотвратить перезапись.