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

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

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

14 ответов


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

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

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

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


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

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

другой способ обойти это, чтобы использовать yes команда:

yes | cp -rf /zzz/zzz/* /xxx/xxx

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

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

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


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

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

вы можете проверить это с помощью :

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

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

$ unalias cp -i

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

вы можете добавлять \ до cp команда для использования без псевдонима.

\cp -fR source target

по умолчанию cp имеет aliase к 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'

чтобы решить эту проблему, просто использовать cp /from /to


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

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

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

/bin/cp <arguments here> src dest

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

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

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


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

command cp -rf /zzz/zzz/*


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

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

/bin/CP назначение исходного файла


cp -u ...
cp --update ...

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


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

просто использовать:

псевдоним 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