14 votes

Comment utiliser 'cp' pour écraser des fichiers ?

En utilisant un script shell ou le Terminal, comment puis-je écraser des fichiers qui peuvent être présents ou non. J'ai consulté la page de manuel de cp, il disait d'utiliser l'argument -f pour forcer l'écrasement. Mais ça ne fait rien.

$ cp -f /chemin/vers/le/fichier/source.txt /chemin/vers/la/cible

Ou y a-t-il une autre option pour écraser des fichiers en utilisant les outils en ligne de commande courants dans OS X ?

3 votes

Cela fonctionne pour moi. Qu'est-ce qu'il fait au lieu de l'écraser lorsque vous essayez ?

2 votes

Si vous n'avez pas la permission d'écraser le fichier cible, cela échouera. Si vous voulez vraiment écraser un fichier cible, vous pouvez utiliser sudo au début de la commande. Mais utilisez avec prudence!

0 votes

@Gordon Davisson : Que fait-il ? Rien. Il ne fera que copier les fichiers dans le répertoire cible si je les déplace ou supprime.

19voto

octern Points 933

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

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

10voto

Frank Hardisty Points 98

Cela pourrait être causé par un alias de commande.

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

1 votes

Pas sûr pourquoi cela a été downvoté. J'étais sous l'impression que la spécification explicite de -f outrepasserait -i dans l'alias, mais j'ai vérifié et ce n'est pas le cas. L'auteur devrait vérifier s'ils ont un alias pour cp (tapez alias cp). Ils peuvent changer l'alias dans leur profil ou utiliser /bin/cp comme suggéré.

0 votes

Je suis en train d'utiliser cp par défaut tel qu'Apple l'a fourni.

0 votes

@octern: roger$ alias cp -bash: alias: cp: non trouvé

2voto

vtoanb Points 21
rm foo/bar/destination && cp source foo/bar/destination

Tout d'abord, vous supprimez (rm) la destination, puis si réussi (&&) vous effectuez votre copie. Lors de la suppression d'un dossier, n'oubliez pas d'ajouter -r à rm (rm -r).

1voto

J'avais aussi un alias qui causait des problèmes avec -f, appelez directement cp depuis /bin et tout va bien, avoir un alias qui empêche les écrasements/suppressions accidentels par défaut est plutôt bien, donc il vaut mieux ne pas le supprimer.

.# alias

alias cp='cp -i'

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

.# /bin/cp -fauv src dst

1voto

C'est plus simple. Si vous utilisez un backslash avant votre commande, cela écrasera les fichiers sans demander.

$ \cp /chemin/du/fichier/source.txt /chemin/vers/la/cible

0 votes

Juste pour expliquer pourquoi cela fonctionne : le backslash avant la commande forcera le système d'exploitation à utiliser une vraie commande au lieu de son alias. Vous n'avez donc pas besoin de commenter quoi que ce soit dans vos alias.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X