Как заставить 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=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