Sto cercando di usare il cp
comando e forzare una sovrascrittura.
Ho provato cp -rf /foo/* /bar
, ma mi viene ancora richiesto di confermare ogni sovrascrittura.
Sto cercando di usare il cp
comando 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 .bashrc
o .profile
ha un alias di cp
to cp -i
, la maggior parte dei sistemi moderni (principalmente derivati di RH) lo fanno sui profili di root.
È possibile controllare gli alias esistenti eseguendo alias
al prompt dei comandi o which cp
per controllare solo gli alias cp
.
Se hai definito un alias, l'esecuzione unalias cp
lo 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 cp
e copiato tutto ciò che è necessario copiare, è possibile ripristinare l'alias sui valori predefiniti alias cp='cp -i'
. Dopodiché, esegui in alias cp
modo da poter verificare che sia tornato all'alias predefinito.
Ciò è probabilmente causato cp
dall'essere già alias di qualcosa del genere cp -i
. La chiamata cp
diretta dovrebbe funzionare:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Un altro modo per aggirare questo è usare il yes
comando:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
comando. Divertente. E un giorno potrei usarlo.
Come alcune delle altre risposte hanno affermato, probabilmente utilizza un qualche alias che associa cp
al cp -i
o 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
, \cp
invocherà il comando cp
. Questo sembra essere l'equivalente della corsa command cp
.
Probabilmente hai un alias da qualche parte, mappando cp
a cp -i
; perché con le impostazioni predefinite, cp
non chiederà di sovrascrivere. Controlla il tuo .bashrc
, il tuo .profile
ecc.
Vedi la manpage cp : solo quando -i
viene specificato il parametro verrà cp
effettivamente richiesto prima della sovrascrittura.
Puoi verificarlo tramite il alias
comando:
$ 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 cp
comando per usarlo senza alias.
\cp -fR source target
Di default cp
ha anche cp -i
. Puoi controllarlo, digitare alias
e 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 /to
comandocp /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 -iv
e ho trovato un trucco accurato. Si scopre che while -i
ed -n
entrambi annullano le precedenti direttive di sovrascrittura, -f
non lo fanno. Tuttavia, se lo usi -nf
aggiunge 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 command
builtin 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 -i
dal 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 -n
si impedisce una sovrascrittura.