Estou tentando usar o cp
comando e forçar uma substituição.
Eu tentei cp -rf /foo/* /bar
, mas ainda sou solicitado a confirmar cada substituição.
Estou tentando usar o cp
comando e forçar uma substituição.
Eu tentei cp -rf /foo/* /bar
, mas ainda sou solicitado a confirmar cada substituição.
Respostas:
Você pode fazer isso yes | cp -rf xxx yyy
, mas meu sentimento de intestino diz que, se você faz isso como root - seu .bashrc
ou .profile
tem um apelido cp
para - cp -i
, a maioria dos sistemas modernos (principalmente derivados de RH) fazem isso nos perfis de raiz.
Você pode verificar aliases existentes executando alias
no prompt de comando ou which cp
verificar apenas aliases cp
.
Se você tiver um alias definido, a execução unalias cp
abolirá a da sessão atual; caso contrário, você poderá removê-lo do seu perfil de shell.
Você pode ignorar temporariamente um alias e usar a versão sem alias de um comando, prefixando-o com \
, por exemplo,\cp whatever
¯\_(ツ)_/¯
sobre isso.
(primarily RH-derivatives)
comentário :)
unalias cp
e copiar o que você precisar copiar, você pode definir o alias de volta ao padrão fazendo alias cp='cp -i'
. Depois disso, execute alias cp
para verificar se está de volta ao alias padrão.
Provavelmente, isso é causado por cp
já estar associado a algo parecido cp -i
. Ligar cp
diretamente deve funcionar:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Outra maneira de contornar isso é usar o yes
comando:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
comando. Hilário. E um dia eu posso usá-lo.
Como algumas das outras respostas afirmaram, você provavelmente usa um algum lugar apelido que mapeia cp
para cp -i
ou algo similar. Você pode executar um comando sem nenhum alias, precedendo-o com uma barra invertida. No seu caso, tente
\cp -r /zzz/zzz/* /xxx/xxx
A barra invertida desabilitará temporariamente os apelidos que você chamou cp
.
cp
, \cp
invocará o comando cp
. Parece ser o equivalente à execução command cp
.
Você provavelmente tem um alias em algum lugar, mapeando cp
para cp -i
; porque com as configurações padrão, cp
não solicitará a substituição. Verifique seu .bashrc
, seu .profile
etc.
Consulte cp manpage : Somente quando o -i
parâmetro for especificado, cp
na verdade, será solicitado antes da substituição.
Você pode verificar isso através do alias
comando:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Para definir o alias, use:
$ unalias cp
Como outras respostas afirmaram, isso pode acontecer se cp
for um alias de cp -i
.
Você pode anexar um \
antes do cp
comando para usá-lo sem alias.
\cp -fR source target
Por padrão, cp
tem aliase para cp -i
. Você pode verificá-lo, digitar alias
e pode ver alguns como:
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'
Para resolver esse problema, basta usar o /bin/cp /from /to
comandocp /from /to
cp
geralmente é um alias como este
alias cp='cp -i' # i.e. ask questions of overwriting
se tiver certeza de que deseja fazer a substituição, use o seguinte:
/bin/cp <arguments here> src dest
Eu achei isto
'cp' -rf * /data/danalonso_testing/target/
Fonte: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Então, eu me deparo muito com isso porque mantenho o alias do cp cp -iv
e achei um truque interessante. Acontece que, enquanto -i
e -n
tanto cancelar directivas sobrescrever anteriores, -f
não. No entanto, se você usá- -nf
lo, adiciona a capacidade de limpar o arquivo -i
. Assim:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Muito legal né? / necropost
cp -u ...
cp --update ...
também funciona.
Outra maneira de chamar o comando sem o alias é usar o command
built-in no bash.
command cp -rf /zzz/zzz/*
-n é "não sobrescrever", mas a pergunta dele é totalmente oposta à que você respondeu.
Para evitar essa confirmação, você pode simplesmente executar o comando cp com o caminho absoluto, evitando o alias.
destino do arquivo de origem / bin / cp
Se você deseja manter o alias no nível global como está e apenas deseja alterar o seu script.
Apenas use:
alias cp = cp
e escreva seus comandos de acompanhamento.
Simplesmente usei unalias para remover o alias "cp -i", depois faça a cópia e, em seguida, defina o alias. :
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
Não é o código mais bonito, mas fácil de configurar e eficiente. Também verifico que o alias já está atrasado com um simples
alias |grep cp
Não é cp -i
. Se você não deseja ser solicitado para confirmação, é cp -n
; por exemplo:
cp -n src dest
Ou no caso de diretórios / pastas é:
cp -nr src_dir dest_dir
cp -i
pelo sistema, o que significa que eles estavam tentando superar o padrão e forçar uma substituição. Parece que você pode ter confundido que por ser a sintaxe sugerida, mas -n
vai evitar uma substituição.