À 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?
terminal
command-line
script
rogerFernand
la source
la source
sudo
au début de la commande. Mais utilisez avec prudence!mv
eux ourm
eux.sudo
je peux utilisermv
ourm
pour déplacer ou supprimer des fichiers avant de l'utilisercp
. L'utilisationsudo cp
ne fait aucune différence.Réponses:
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.la source
Cela peut être dû à un alias de commande.
Pour appeler
cp
directement, vous pouvez utiliser/bin/cp src dest
la source
alias cp
). Ils peuvent changer l'alias dans leur profil ou utiliser / bin / cp comme suggéré.cp
comme Apple l'a fourni.roger$ alias cp -bash: alias: cp: not found
type cp
. Et c'est effectivement le cas.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
).la source
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.
comme déjà indiqué, le drapeau -i dépasse -f, ce qui ne permettrait pas à la commande ci-dessous de fonctionner comme prévu.
la source