Sto cercando di usare il cpcomando e forzare una sovrascrittura.
Ho provato cp -rf /foo/* /bar, ma mi viene ancora richiesto di confermare ogni sovrascrittura.
Sto cercando di usare il cpcomando e forzare una sovrascrittura.
Ho provato cp -rf /foo/* /bar, ma mi viene ancora richiesto di confermare ogni sovrascrittura.
Risposte:
Puoi farlo yes | cp -rf xxx yyy, ma il mio gutfeeling dice che se lo fai come root - il tuo .bashrco .profileha un alias di cpto cp -i, la maggior parte dei sistemi moderni (principalmente derivati di RH) lo fanno sui profili di root.
È possibile controllare gli alias esistenti eseguendo aliasal prompt dei comandi o which cpper controllare solo gli alias cp.
Se hai definito un alias, l'esecuzione unalias cplo eliminerà per la sessione corrente, altrimenti puoi semplicemente rimuoverlo dal tuo profilo shell.
È possibile bypassare temporaneamente un alias e utilizzare la versione non alias di un comando aggiungendolo come prefisso \, ad es\cp whatever
¯\_(ツ)_/¯parlando.
(primarily RH-derivatives)un'osservazione :)
unalias cpe copiato tutto ciò che è necessario copiare, è possibile ripristinare l'alias sui valori predefiniti alias cp='cp -i'. Dopodiché, esegui in alias cpmodo da poter verificare che sia tornato all'alias predefinito.
Ciò è probabilmente causato cpdall'essere già alias di qualcosa del genere cp -i. La chiamata cpdiretta dovrebbe funzionare:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Un altro modo per aggirare questo è usare il yescomando:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yescomando. Divertente. E un giorno potrei usarlo.
Come alcune delle altre risposte hanno affermato, probabilmente utilizza un qualche alias che associa cpal cp -io qualcosa di simile. È possibile eseguire un comando senza alias precedendolo con una barra rovesciata. Nel tuo caso, prova
\cp -r /zzz/zzz/* /xxx/xxx
La barra rovesciata disabiliterà temporaneamente tutti gli alias che hai chiamato cp.
cp, \cpinvocherà il comando cp. Questo sembra essere l'equivalente della corsa command cp.
Probabilmente hai un alias da qualche parte, mappando cpa cp -i; perché con le impostazioni predefinite, cpnon chiederà di sovrascrivere. Controlla il tuo .bashrc, il tuo .profileecc.
Vedi la manpage cp : solo quando -iviene specificato il parametro verrà cpeffettivamente richiesto prima della sovrascrittura.
Puoi verificarlo tramite il aliascomando:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Per annullare la definizione dell'alias, utilizzare:
$ unalias cp
Come hanno affermato altre risposte, ciò potrebbe accadere se cpè un alias di cp -i.
Puoi aggiungere a \prima del cpcomando per usarlo senza alias.
\cp -fR source target
Di default cpha anche cp -i. Puoi controllarlo, digitare aliase puoi vedere alcuni come:
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'
Per risolvere questo problema basta usare il /bin/cp /from /tocomandocp /from /to
cp di solito è alias in questo modo
alias cp='cp -i' # i.e. ask questions of overwriting
se sei sicuro di voler eseguire la sovrascrittura, usa questo:
/bin/cp <arguments here> src dest
ho trovato questo
'cp' -rf * /data/danalonso_testing/target/
Fonte: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Quindi mi imbatto molto in questo perché continuo a cp alias cp -ive ho trovato un trucco accurato. Si scopre che while -ied -nentrambi annullano le precedenti direttive di sovrascrittura, -fnon lo fanno. Tuttavia, se lo usi -nfaggiunge la possibilità di cancellare il -i. Così:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Abbastanza pulito eh? / necropost
cp -u ...
cp --update ...
funziona anche.
Un altro modo per chiamare il comando senza l'alias è usare il commandbuiltin in bash.
command cp -rf /zzz/zzz/*
-n è "non sovrascrivere" ma la sua domanda è totalmente opposta a quella per cui hai risposto.
Per evitare questa conferma puoi semplicemente eseguire il comando cp con percorso assoluto, eviterà l'alias.
Destinazione del file sorgente / bin / cp
Se vuoi mantenere l'alias a livello globale così com'è e vuoi solo cambiare per il tuo script.
Usa solo:
alias cp = cp
e quindi scrivi i tuoi comandi di follow-up.
Ho semplicemente usato unalias per rimuovere l'alias "cp -i", quindi fare la copia, quindi ripristinare l'alias. :
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
Non è il codice più bello, ma facile da impostare ed efficiente. Controllo anche che l'alias sia già arretrato con un semplice
alias |grep cp
Non lo è cp -i. Se non si desidera che venga chiesta conferma, lo è cp -n; per esempio:
cp -n src dest
O in caso di directory / cartelle è:
cp -nr src_dir dest_dir
cp -idal sistema, il che significa che stavano cercando di superare il valore predefinito e forzare una sovrascrittura. Suona come si può avere confuso che per essere la sintassi suggerito, ma -nsi impedisce una sovrascrittura.