J'essaie d'utiliser la commande cp
et de forcer un écrasement.
J'ai essayé cp -rf /foo/* /bar
, mais on me demande toujours de confirmer chaque remplacement.
Vous pouvez faire yes | cp -rf xxx yyy
, mais mon instinct dit que si vous le faites en tant que root - votre .bashrc
ou .profile
a un alias de cp
à cp -i
, most les systèmes modernes (principalement les dérivés de la RH) font cela aux profils de racines.
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 défini un alias, l'exécution de unalias cp
l'abolira pour la session en cours, sinon vous pouvez simplement le supprimer de votre profil Shell.
Vous pouvez contourner temporairement un alias et utiliser la version d'une commande sans alias en lui attribuant le préfixe \
, par exemple. \cp whatever
Ceci est probablement dû au fait que cp
est déjà associé à quelque chose comme cp -i
. Appeler directement cp
devrait fonctionner:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Une autre façon de contourner ce problème consiste à utiliser la commande yes
:
yes | cp -rf /zzz/zzz/* /xxx/xxx
Comme d'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 faisant précéder d'une barre oblique inverse. Dans votre cas, essayez
\cp -r /zzz/zzz/* /xxx/xxx
La barre oblique inverse désactivera temporairement les alias que vous avez appelés cp
.
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.
Voir page de manuel de cp : Uniquement lorsque le paramètre -i
est spécifié, cp
sera effectivement invité avant le remplacement.
Vous pouvez le vérifier via la commande alias
:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Pour annuler l'alias, utilisez:
$ unalias cp
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 la commande cp
pour l'utiliser sans alias.
\cp -fR source target
Par défaut, cp
est associé à cp -i
. Vous pouvez le vérifier, tapez alias
et vous pourrez 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 de cp /from /to
cp -u ...
cp --update ...
fonctionne aussi.
cp
est généralement aliasé comme ceci
alias cp='cp -i' # i.e. ask questions of overwriting
si vous êtes sûr de vouloir écraser, utilisez ceci:
/bin/cp <arguments here> src dest
Une autre façon d’appeler la commande sans l’alias consiste à utiliser le command
intégré dans bash.
command cp -rf /zzz/zzz/*
J'ai trouvé ça
'cp' -rf * /data/danalonso_testing/target/
vous pouvez aussi utiliser cette commande:
cp -ru /zzz/zzz/* /xxx/xxx
cependant, cela mettrait à jour votre fichier existant avec le plus récent.
Si vous souhaitez conserver un alias au niveau global tel quel et que vous souhaitiez simplement changer pour votre script.
Il suffit d'utiliser:
alias cp = cp
puis écrivez vos commandes de suivi.
-n est "ne pas écraser" mais sa question est totalement opposée à celle pour laquelle vous avez répondu.
Pour éviter cette confirmation, vous pouvez simplement exécuter la commande cp avec un chemin absolu afin d'éviter l'alias.
/ bin/cp source source file
J'ai simplement utilisé unalias pour supprimer l'alias "cp -i", puis faire la copie, puis redéfinir l'alias. :
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
Pas le plus beau code, mais facile à configurer et efficace. Je vérifie également que l'alias est déjà en retrait avec un simple
alias |grep cp