Comment utiliser «cp» pour écraser des fichiers?

10

À l'aide d'un script shell ou d'un terminal, comment remplacer des fichiers qui peuvent ou non être présents. J'ai regardé la page de manuel pour cp, il a dit d'utiliser l'argument -f pour forcer l'écrasement. Mais ça ne fait rien.

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

Ou existe-t-il une autre option pour remplacer les fichiers à l'aide des outils de ligne de commande intégrés courants dans OS X?

rogerFernand
la source
3
Ça marche pour moi. Que fait-il au lieu d'écraser lorsque vous l'essayez?
Gordon Davisson
2
Si vous n'êtes pas autorisé à remplacer le fichier cible, cela échouera. Si vous voulez vraiment écraser un fichier cible, vous pouvez utiliser sudoau début de la commande. Mais utilisez avec prudence!
Daniel
@Gordon Davisson: Que fait-il? rien. Il ne copiera les fichiers dans le répertoire cible que si mveux ou rmeux.
rogerFernand
@Daniel Lawson: Sans utiliser, sudoje peux utiliser mvou rmpour déplacer ou supprimer des fichiers avant de l'utiliser cp. L'utilisation sudo cpne fait aucune différence.
rogerFernand
Curieux et curieux.
Daniel

Réponses:

14

Je suis perplexe quant à la raison pour laquelle cp se comporte de cette façon s'il n'y a pas d'alias impliqué. Cependant, il existe un utilitaire rapide sale et dangereux prévue cette situation exacte: yes. Vous pouvez l'utiliser pour diriger un flux continu d'affirmations dans n'importe quelle commande qui vous donne des invites de confirmation (vous pouvez l'utiliser pour envoyer n'importe quel texte, mais la valeur par défaut est "y").

yes | cp foo bar exécutera la commande cp et contournera toutes les invites de confirmation.

octern
la source
8

Cela peut être dû à un alias de commande.

Pour appeler cpdirectement, vous pouvez utiliser/bin/cp src dest

Aji
la source
1
Je ne sais pas pourquoi cela a été rejeté. J'avais l'impression que spécifier explicitement -f remplacerait -i dans l'alias, mais j'ai vérifié et ce n'est pas le cas. L'affiche doit savoir s'ils ont un alias cp (type alias cp). Ils peuvent changer l'alias dans leur profil ou utiliser / bin / cp comme suggéré.
octern
J'utilise par défaut cpcomme Apple l'a fourni.
rogerFernand
@octern:roger$ alias cp -bash: alias: cp: not found
rogerFernand
J'ai dû utiliser / bin / cp, je ne sais pas pourquoi.
beingalex
1
Je suis peut-être bien trop tard, mais pour les personnes venant du moteur de recherche, j'ai pu voir si la commande avait un alias type cp. Et c'est effectivement le cas.
Cri
2
rm foo/bar/destination && cp source foo/bar/destination

Vous supprimez d'abord ( rm) la destination, puis en cas de succès ( &&) vous effectuez votre copie. Lors de la suppression d'un dossier, n'oubliez pas d'ajouter -rà rm( rm -r).

vtoanb
la source
1

J'ai également eu un alias qui gâche avec -f, appelez cp directement à partir de / bin et tout va bien, avoir un alias qui empêche les remplacements / suppressions accidentelles par défaut est assez bon, il vaut donc mieux ne pas le supprimer.

. # alias

alias cp = 'cp -i'

comme déjà indiqué, le drapeau -i dépasse -f, ce qui ne permettrait pas à la commande ci-dessous de fonctionner comme prévu.

. # / bin / cp -fauv src dst

Niklas Göransson
la source