Ich versuche, den cpBefehl zu verwenden und ein Überschreiben zu erzwingen.
Ich habe es versucht cp -rf /foo/* /bar, werde aber dennoch aufgefordert, jedes Überschreiben zu bestätigen.
Ich versuche, den cpBefehl zu verwenden und ein Überschreiben zu erzwingen.
Ich habe es versucht cp -rf /foo/* /bar, werde aber dennoch aufgefordert, jedes Überschreiben zu bestätigen.
Antworten:
Sie können dies tun yes | cp -rf xxx yyy, aber mein Bauchgefühl besagt, dass die meisten modernen Systeme (hauptsächlich RH-Derivate) dies für Root-Profile tun, wenn Sie dies als Root tun - Ihr .bashrcoder .profilemit einem Alias von cpto cp -i.
Sie können vorhandene Aliase überprüfen, indem Sie sie aliasan der Eingabeaufforderung ausführen oder which cpAliase nur auf überprüfen cp.
Wenn Sie einen Alias definiert haben, unalias cpwird dieser durch Ausführen für die aktuelle Sitzung aufgehoben. Andernfalls können Sie ihn einfach aus Ihrem Shell-Profil entfernen.
Sie können einen Alias vorübergehend umgehen und die nicht aliasisierte Version eines Befehls verwenden, indem Sie ihm \z\cp whatever
¯\_(ツ)_/¯dabei.
(primarily RH-derivatives)Bemerkung :)
unalias cpSie alles getan und kopiert haben, was Sie zum Kopieren benötigen, können Sie den Alias auf den Standardwert zurücksetzen alias cp='cp -i'. Führen alias cpSie anschließend aus, damit Sie überprüfen können, ob der Standardalias wiederhergestellt ist.
Dies wird wahrscheinlich dadurch verursacht, cpdass Sie bereits auf so etwas eingestellt sind cp -i. cpDirekt anrufen sollte funktionieren:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Eine andere Möglichkeit, dies zu umgehen, ist die Verwendung des folgenden yesBefehls:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yesBefehl liefert . Urkomisch. Und eines Tages kann ich es benutzen.
Wie in einigen anderen Antworten angegeben, verwenden Sie wahrscheinlich irgendwo einen Alias, der zugeordnet ist cp, cp -ioder etwas Ähnliches. Sie können einen Befehl ohne Aliase ausführen, indem Sie ihm einen Backslash voranstellen. Versuchen Sie es in Ihrem Fall
\cp -r /zzz/zzz/* /xxx/xxx
Der Backslash deaktiviert vorübergehend alle von Ihnen aufgerufenen Aliase cp.
cp, \cpwird der Befehl aufgerufen cp. Dies scheint das Äquivalent zum Laufen zu sein command cp.
Sie haben wahrscheinlich irgendwo einen Alias, cpder zugeordnet ist cp -i. weil mit den Standardeinstellungen cpnicht zum Überschreiben aufgefordert wird. Überprüfen Sie Ihre .bashrc, Ihre .profileusw.
Siehe cp-Manpage : Nur wenn ein -iParameter angegeben ist, wird cpvor dem Überschreiben tatsächlich eine Aufforderung angezeigt.
Sie können dies über den folgenden aliasBefehl überprüfen :
$ alias
alias cp='cp -i'
alias diff='diff -u'
....
Verwenden Sie zum Aufheben der Definition des Alias Folgendes:
$ unalias cp
Wie andere Antworten angegeben haben, könnte dies passieren, wenn cpes sich um einen Alias von handelt cp -i.
Sie können ein \vor dem cpBefehl anhängen , um es ohne Alias zu verwenden.
\cp -fR source target
Standardmäßig cphat Aliase zu cp -i. Sie können es überprüfen, eingeben aliasund einige sehen wie:
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'
Um dieses Problem zu lösen, verwenden Sie /bin/cp /from /tostattdessen einfach den Befehlcp /from /to
cp ist normalerweise so aliasiert
alias cp='cp -i' # i.e. ask questions of overwriting
Wenn Sie sicher sind, dass Sie das Überschreiben durchführen möchten, verwenden Sie Folgendes:
/bin/cp <arguments here> src dest
ich habe das gefunden
'cp' -rf * /data/danalonso_testing/target/
Quelle: /superuser/358843/how-to-replace-all-the-contents-from-one-folder-with-another-one/358851
Deshalb stoße ich oft darauf cp -iv, weil ich mich auf CP konzentriere und einen ordentlichen Trick gefunden habe. Es stellt sich heraus, dass zwar -iund -nbeide frühere Überschreibungsanweisungen abbrechen, dies -fjedoch nicht der Fall ist. Wenn Sie es jedoch verwenden -nf, wird die Möglichkeit hinzugefügt, das zu löschen -i. Damit:
cp -f /foo/* /bar <-- Prompt
cp -nf /foo/* /bar <-- No Prompt
Ziemlich ordentlich, oder? / Nekropost
cp -u ...
cp --update ...
funktioniert auch.
Eine andere Möglichkeit, den Befehl ohne Alias commandaufzurufen, besteht darin, die integrierte Bash zu verwenden.
command cp -rf /zzz/zzz/*
-n ist "nicht zu überschreiben", aber seine Frage ist völlig entgegengesetzt zu dem, worauf Sie geantwortet haben.
Um diese Bestätigung zu vermeiden, können Sie einfach den Befehl cp mit dem absoluten Pfad ausführen. Dadurch wird der Alias vermieden.
/ bin / cp Quelldateiziel
Wenn Sie den Alias unverändert auf globaler Ebene halten und nur für Ihr Skript ändern möchten.
Benutz einfach:
Alias cp = cp
und schreiben Sie dann Ihre Folgebefehle.
Ich habe einfach Unalias verwendet, um den Alias "cp -i" zu entfernen, dann die Kopie zu erstellen und dann den Alias zurückzusetzen. ::
unalias cp
cp -f foo foo.copy
alias cp="cp -i"
Nicht der schönste Code, aber einfach einzustellen und effizient. Ich überprüfe auch, ob der Alias bereits mit einem einfachen zurückgesetzt ist
alias |grep cp
Es ist nicht cp -i. Wenn Sie nicht um Bestätigung gebeten werden möchten, ist dies der Fall cp -n. zum Beispiel:
cp -n src dest
Oder bei Verzeichnissen / Ordnern ist:
cp -nr src_dir dest_dir
cp -ivom System verknüpft wurde, was bedeutete, dass sie versuchten, die Standardeinstellung zu überwinden und ein Überschreiben zu erzwingen . Es hört sich so an, als hätten Sie dies als vorgeschlagene Syntax verwechselt, aber ein Überschreiben -nwird verhindert .