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

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

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

Вы можете проверить это с помощью команды alias:

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

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

$ unalias cp -i

Ответ 5

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

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

\cp -fR source target

Ответ 6

По умолчанию 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

Ответ 7

cp обычно псевдоним, подобный этому

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

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

/bin/cp <arguments here> src dest

Ответ 8

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

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

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

Ответ 9

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

command cp -rf /zzz/zzz/*

Ответ 10

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

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

/bin/cp исходный файл

Ответ 11

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

Просто используйте:

псевдоним cp = cp

а затем запишите свои последующие команды.

Ответ 12

Я просто использовал unalias для удаления псевдонима cp -i, затем сделайте копию, а затем верните псевдоним.:

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

Не самый красивый код, но его легко установить и эффективно. Я также проверяю, что псевдоним уже установлен с помощью простого

alias |grep cp

Ответ 13

Это не cp -i. Если вы не хотите, чтобы вас попросили подтвердить, это cp -n; например:

cp -n src dest

Или в случае каталогов/папок:

cp -nr src_dir dest_dir