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.