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



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



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

631   14  

14 ответов:

можно сделать yes | cp -rf xxx yyy, но мой кишечник говорит, что если вы делаете это как корень-ваш .bashrc или .profile присвоен псевдоним cp до 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 до cp -i, потому что с настройками по умолчанию, cp не будет просить перезаписать. Проверьте ваш .bashrc ваш .profile etc.

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

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

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

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

$ unalias cp -i

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

вы можете добавить a \ до 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 sourcefile destination

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

Comments

    Ничего не найдено.