Come posso usare 'cp' per sovrascrivere i file?


10

Utilizzando uno script di shell o un Terminale, come posso sovrascrivere i file che possono essere o meno presenti. Ho guardato la pagina man per cp, diceva che usa l'argomento -f per forzare la sovrascrittura. Ma non fa nulla.

$ cp -f /path/to/source/file.txt /path/to/target

Oppure esiste un'altra opzione per sovrascrivere i file utilizzando i comuni strumenti incorporati della riga di comando in OS X?


3
Per me funziona. Cosa sta facendo invece di sovrascrivere quando lo provi?
Gordon Davisson,

2
Se non si dispone dell'autorizzazione per sovrascrivere il file di destinazione, ciò non riuscirà. Se vuoi davvero sovrascrivere un file di destinazione, puoi usarlo sudoall'inizio del comando. Ma usare con cautela!
Daniel

@Gordon Davisson: che cosa sta facendo? Niente. Copia i file nella directory di destinazione solo se mvli o rmloro.
Roger Fernand,

@Daniel Lawson: Senza usare sudoposso usare mvo rmper spostare o rimuovere i file prima dell'uso cp. L'uso sudo cpnon fa alcuna differenza.
Roger Fernand,

Curioso e curioso.
Daniel

Risposte:


14

Sono sconcertato sul perché cp si sta comportando in questo modo se non ci sono alias coinvolti. Tuttavia, v'è un programma di utilità veloce-dirty-e-pericolose di questa situazione esatta: yes. Puoi usarlo per convogliare un flusso continuo di affermativi in ​​qualsiasi comando che ti dia prompt di conferma (puoi usarlo per inviare qualsiasi testo, ma il valore predefinito è "y").

yes | cp foo bar eseguirà il comando cp e ignorerà tutte le richieste di conferma.


8

Potrebbe essere causato da un alias di comando.

Per chiamare cpdirettamente è possibile utilizzare/bin/cp src dest


1
Non sono sicuro del motivo per cui questo è stato sottoposto a downgrade. Avevo l'impressione che specificare esplicitamente -f avrebbe sostituito -i nell'alias, ma ho controllato e non lo fa. Il poster dovrebbe scoprire se hanno cp alias (tipo alias cp). Possono cambiare l'alias nel loro profilo o usare / bin / cp come suggerito.
ottobre

Sto usando il valore predefinito cpfornito da Apple.
Roger Fernand,

@octern:roger$ alias cp -bash: alias: cp: not found
rogerFernand il

Ho dovuto usare / bin / cp non so perché.
beingalex,

1
Potrei essere troppo tardi, ma per le persone che provengono dal motore di ricerca sono stato in grado di vedere se il comando avesse un alias type cp. E lo ha fatto davvero.
grido

2
rm foo/bar/destination && cp source foo/bar/destination

Per prima cosa rimuovi ( rm) la destinazione, quindi in caso di successo ( &&) esegui la copia. Quando rimuovi una cartella, ricorda di aggiungere -ra rm( rm -r).


1

Ho anche avuto un alias che rovina -f, chiama cp direttamente da / bin e tutto va bene, avere un alias che impedisce per impostazione predefinita sovrascritture / rimozioni è abbastanza buono, quindi è meglio non rimuoverlo.

. # alias

alias cp = 'cp -i'

come già detto, il flag -i supera -f, che non consentirebbe al comando sottostante di funzionare come previsto.

. # / bin / cp -fauv src dst

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.