Comment forcer cp à écraser sans confirmation

J'essaie d'utiliser la commande cp et de forcer un écrasement.

J'ai essayé cp -rf /foo/* /bar, mais je suis toujours invité à confirmer chaque réécriture.

487
demandé sur Duncan X Simpson 2011-12-13 15:17:47

14 réponses

Vous pouvez faire yes | cp -rf xxx yyy, mais mon gutfeeling dit que si vous le faites en tant que root-votre .bashrc ou .profile a un alias de cp à cp -i, la plupart des systèmes modernes (principalement des dérivés RH) le font pour les profils racine.

Vous pouvez vérifier les alias existants en exécutant alias à l'invite de commande, ou which cp pour vérifier les alias uniquement pour cp.

Si vous avez un alias défini, l'exécution de unalias cp supprimera cela pour la session en cours, sinon vous pouvez simplement le supprimer de votre shell profil.

Vous pouvez contourner temporairement un alias et utiliser la version non aliasée d'une commande en la préfixant par \, par exemple \cp whatever

856
répondu favoretti 2018-01-21 11:45:52

Cela est probablement dû au fait que cp est déjà aliasé à quelque chose comme cp -i. Appeler cp directement devrait fonctionner:

/bin/cp -rf /zzz/zzz/* /xxx/xxx

Une autre façon de contourner cela est d'utiliser la commande yes:

yes | cp -rf /zzz/zzz/* /xxx/xxx
214
répondu pgl 2011-12-13 11:20:41

Comme certaines des autres réponses l'ont indiqué, vous utilisez probablement un alias quelque part qui mappe cp à cp -i ou quelque chose de similaire. Vous pouvez exécuter une commande sans alias en la précédant d'une barre oblique inverse. Dans votre cas, essayez

\cp -r /zzz/zzz/* /xxx/xxx

La barre oblique inverse désactivera temporairement tous les alias que vous avez appelés cp.

89
répondu Chris 2011-12-13 11:30:28

Vous avez probablement un alias quelque part, mappant cp à cp -i; car avec les paramètres par défaut, cp ne demandera pas d'écraser. Vérifiez votre .bashrc votre .profile, etc.

VoirCP manpage : ce n'est que lorsque le paramètre -i est spécifié que cp invite réellement avant d'écraser.

Vous pouvez vérifier cela via la commande alias:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

Pour annuler l'alias, utilisez:

$ unalias cp -i
39
répondu codeling 2017-08-07 08:46:33

Comme d'autres réponses l'ont indiqué, cela pourrait se produire si cp est un alias de cp -i.

, Vous pouvez ajouter un \ avant cp commande de l'utiliser sans alias.

\cp -fR source target
34
répondu Arnold Roa 2016-07-29 02:19:26

Par défaut cp a aliase à cp -i. Vous pouvez le vérifier, tapez alias et vous pouvez en voir comme:

alias cp='cp -i'
alias l.='ls -d .* --color=auto'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'
alias mv='mv -i'
alias rm='rm -i'

Pour résoudre ce problème, utilisez simplement la commande /bin/cp /from /to à la place cp /from /to

18
répondu Avseiytsev Dmitriy 2013-05-13 07:05:45

cp est généralement un alias comme ceci

alias cp='cp -i'   # i.e. ask questions of overwriting

Si vous êtes sûr de vouloir faire l'écrasement, utilisez ceci:

/bin/cp <arguments here> src dest
8
répondu user5035029 2016-04-19 14:07:18

Vous pouvez également utiliser cette commande:

cp -ru /zzz/zzz/* /xxx/xxx

Il mettrait à jour votre fichier existant avec le plus récent cependant.

5
répondu sigeje 2014-05-19 09:28:16

Une Autre façon d'appeler la commande sans l'alias est d'utiliser le command builtin dans bash.

command cp -rf /zzz/zzz/*

4
répondu Steve Buzonas 2014-07-10 18:34:59

- n est "ne pas écraser" mais sa question est totalement opposée à ce que vous avez répondu.

Pour éviter cette confirmation, vous pouvez simplement exécuter la commande cp avec un chemin absolu, cela évitera l'alias.

/bin/cp source destination

2
répondu Rohit Rajput 2017-04-20 16:03:46
cp -u ...
cp --update ...

Fonctionne aussi.

2
répondu softwarevamp 2018-04-13 11:39:23

Si vous voulez garder l'alias au niveau global tel quel et que vous voulez juste changer pour votre script.

Il suffit d'utiliser:

Alias cp=cp

Puis écrivez vos commandes de suivi.

1
répondu Ankit Bhatnagar 2017-08-11 07:29:08

J'ai simplement utilisé unalias pour supprimer l'alias "cp-I", puis faire la copie, puis reculer l'alias. :

unalias cp  
cp -f foo foo.copy  
alias cp="cp -i"  

Pas le plus beau code, mais facile à définir et efficace. Je vérifie aussi que l'alias est déjà en retrait avec un simple

alias |grep cp
0
répondu Maat 2016-07-25 10:11:49

Ce n'est pas cp -i. Si vous ne voulez pas qu'on vous demande une confirmation, il est cp -n; par exemple:

cp -n src dest

Ou dans le cas de répertoires / dossiers est:

cp -nr src_dir dest_dir
-2
répondu mihaitzateo 2016-04-19 14:02:39