Я пытаюсь использовать команду cp
и принудительно перезаписывать.
Я пробовал cp -rf /foo/* /bar
, но мне все еще предлагается подтвердить каждую перезапись.
Я пытаюсь использовать команду cp
и принудительно перезаписывать.
Я пробовал cp -rf /foo/* /bar
, но мне все еще предлагается подтвердить каждую перезапись.
Вы можете сделать yes | cp -rf xxx yyy
, но мой gutfeeling говорит, что если вы сделаете это как root - ваш .bashrc
или .profile
имеет псевдоним cp
to cp -i
, большинство современных систем делают это для корневых профилей,
Вы можете проверить существующие псевдонимы, выполнив 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
в cp -i
или что-то подобное. Вы можете запускать команду без каких-либо псевдонимов, предшествуя ей обратным слэшем. В вашем случае попробуйте
\cp -r /zzz/zzz/* /xxx/xxx
Обратная косая черта временно отключит любые псевдонимы, которые вы назвали cp
.
У вас, вероятно, есть псевдоним где-то, сопоставляя cp
с cp -i
; потому что с настройками по умолчанию cp
не будет запрашивать перезапись. Проверьте .bashrc
, ваш .profile
и т.д.
См. cp manpage: только когда параметр -i
задан, будет cp
на самом деле запрашивать перед перезаписью.
Вы можете проверить это с помощью команды alias
:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Чтобы отменить псевдоним, используйте:
$ unalias cp -i
Как указывали другие ответы, это может произойти, если 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 -ru /zzz/zzz/* /xxx/xxx
он обновил бы существующий файл более новым.
Другим способом вызова команды без псевдонима является использование command
встроенного в bash.
command cp -rf /zzz/zzz/*
-n "не перезаписывать", но его вопрос полностью противоположный тому, на что вы ответили.
Чтобы избежать этого подтверждения, вы можете просто запустить команду cp с абсолютным путем, это позволит избежать псевдонима.
/bin/cp исходный файл
Если вы хотите сохранить псевдоним на глобальном уровне, как есть, и просто хотите изменить его для script.
Просто используйте:
псевдоним 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