J'essaie d'utiliser la cpcommande et de forcer un remplacement.
J'ai essayé cp -rf /foo/* /bar, mais je suis toujours invité à confirmer chaque remplacement.
J'essaie d'utiliser la cpcommande et de forcer un remplacement.
J'ai essayé cp -rf /foo/* /bar, mais je suis toujours invité à confirmer chaque remplacement.
Réponses:
Vous pouvez le faire yes | cp -rf xxx yyy, mais mon intuition dit que si vous le faites en tant que root - votre .bashrcou .profilea un alias de cpto cp -i, la plupart des systèmes modernes (principalement des dérivés RH) le font pour les profils root.
Vous pouvez vérifier les alias existants en exécutant aliasà l'invite de commandes ou which cppour vérifier les alias uniquement pour cp.
Si vous avez défini un alias, l'exécution unalias cple supprimera pour la session en cours, sinon vous pouvez simplement le supprimer de votre profil de shell.
Vous pouvez contourner temporairement un alias et utiliser la version sans alias d'une commande en la préfixant avec \, par exemple\cp whatever
¯\_(ツ)_/¯.
(primarily RH-derivatives)remarque :)
unalias cpet copié tout ce dont vous avez besoin pour copier, vous pouvez redonner à l'alias sa valeur par défaut en faisant alias cp='cp -i'. Après quoi, exécutez alias cppour pouvoir vérifier qu'il est de retour à l'alias par défaut.
Cela est probablement dû au fait cpqu'il a déjà un alias pour quelque chose comme cp -i. Appeler cpdirectement devrait fonctionner:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Une autre façon de contourner ce problème consiste à utiliser la yescommande:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yescommande. Hilarant. Et un jour je pourrai l'utiliser.
Comme certaines des autres réponses l'ont indiqué, vous utilisez probablement un alias quelque part qui correspond cpà cp -iou quelque chose de similaire. Vous pouvez exécuter une commande sans aucun 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.
cp, \cpinvoquera la commande cp. Cela semble être l'équivalent de l'exécution command cp.
Vous avez probablement un alias quelque part, mappé cpà cp -i; car avec les paramètres par défaut, cpne demandera pas d'écraser. Vérifiez votre .bashrc, votre .profileetc.
Voir la page de manuel de cp : Uniquement lorsque le -iparamètre est spécifié, une cpinvite s'affiche avant l'écrasement.
Vous pouvez le vérifier via la aliascommande:
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Pour annuler la définition de l'alias, utilisez:
$ unalias cp
Comme d'autres réponses l'ont indiqué, cela pourrait arriver s'il cps'agit d'un alias de cp -i.
Vous pouvez ajouter un \avant la cpcommande pour l'utiliser sans alias.
\cp -fR source target
Par défaut cpa aliase pour cp -i. Vous pouvez le vérifier, taper aliaset vous pouvez voir certains 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 /bin/cp /from /tocommande à la placecp /from /to
cp est généralement aliasé comme ça
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
j'ai trouvé ça
'cp' -rf * /data/danalonso_testing/target/
Source: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Donc, je rencontre beaucoup cela parce que je garde l'alias cp cp -iv, et j'ai trouvé une astuce intéressante. Il s'avère que while -iet les -ndeux annulent les directives de remplacement précédentes, -fne le fait pas. Cependant, si vous l'utilisez, vous pouvez -nfeffacer le -i. Donc:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Assez bien hein? / nécropost
cp -u ...
cp --update ...
fonctionne également.
Une autre façon d'appeler la commande sans l'alias est d'utiliser le commandbuiltin dans bash.
command cp -rf /zzz/zzz/*
-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 destination du fichier source
Si vous souhaitez conserver l'alias au niveau global tel quel et que vous souhaitez simplement le modifier pour votre script.
Utilisez simplement:
alias cp = cp
puis écrivez vos commandes de suivi.
J'ai simplement utilisé unalias pour supprimer l'alias "cp -i", puis faire la copie, puis réinitialiser l'alias. :
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
Pas le code le plus beau, mais facile à définir et efficace. Je vérifie également que l'alias est déjà en retrait avec un simple
alias |grep cp
Ce n'est pas le cas cp -i. Si vous ne voulez pas qu'on vous demande de confirmation, c'est cp -n; par exemple:
cp -n src dest
Ou dans le cas de répertoires / dossiers:
cp -nr src_dir dest_dir
cp -ipar le système, ce qui signifie qu'ils essayaient de surmonter la valeur par défaut et de forcer un écrasement. On dirait que vous avez peut - être confus que pour être la syntaxe suggérée, mais -nva éviter un écrasement.