J'essaie d'utiliser la cp
commande 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 cp
commande 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 .bashrc
ou .profile
a un alias de cp
to 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 cp
pour vérifier les alias uniquement pour cp
.
Si vous avez défini un alias, l'exécution unalias cp
le 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 cp
et 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 cp
pour pouvoir vérifier qu'il est de retour à l'alias par défaut.
Cela est probablement dû au fait cp
qu'il a déjà un alias pour quelque chose comme cp -i
. Appeler cp
directement devrait fonctionner:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Une autre façon de contourner ce problème consiste à utiliser la yes
commande:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
commande. 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 -i
ou 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
, \cp
invoquera 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, cp
ne demandera pas d'écraser. Vérifiez votre .bashrc
, votre .profile
etc.
Voir la page de manuel de cp : Uniquement lorsque le -i
paramètre est spécifié, une cp
invite s'affiche avant l'écrasement.
Vous pouvez le vérifier via la alias
commande:
$ 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 cp
s'agit d'un alias de cp -i
.
Vous pouvez ajouter un \
avant la cp
commande pour l'utiliser sans alias.
\cp -fR source target
Par défaut cp
a aliase pour cp -i
. Vous pouvez le vérifier, taper alias
et 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 /to
commande à 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 -i
et les -n
deux annulent les directives de remplacement précédentes, -f
ne le fait pas. Cependant, si vous l'utilisez, vous pouvez -nf
effacer 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 command
builtin 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 -i
par 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 -n
va éviter un écrasement.