Ich versuche, den cp
Befehl 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 cp
Befehl 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 .bashrc
oder .profile
mit einem Alias von cp
to cp -i
.
Sie können vorhandene Aliase überprüfen, indem Sie sie alias
an der Eingabeaufforderung ausführen oder which cp
Aliase nur auf überprüfen cp
.
Wenn Sie einen Alias definiert haben, unalias cp
wird 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 cp
Sie 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 cp
Sie anschließend aus, damit Sie überprüfen können, ob der Standardalias wiederhergestellt ist.
Dies wird wahrscheinlich dadurch verursacht, cp
dass Sie bereits auf so etwas eingestellt sind cp -i
. cp
Direkt anrufen sollte funktionieren:
/bin/cp -rf /zzz/zzz/* /xxx/xxx
Eine andere Möglichkeit, dies zu umgehen, ist die Verwendung des folgenden yes
Befehls:
yes | cp -rf /zzz/zzz/* /xxx/xxx
yes
Befehl 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 -i
oder 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
, \cp
wird der Befehl aufgerufen cp
. Dies scheint das Äquivalent zum Laufen zu sein command cp
.
Sie haben wahrscheinlich irgendwo einen Alias, cp
der zugeordnet ist cp -i
. weil mit den Standardeinstellungen cp
nicht zum Überschreiben aufgefordert wird. Überprüfen Sie Ihre .bashrc
, Ihre .profile
usw.
Siehe cp-Manpage : Nur wenn ein -i
Parameter angegeben ist, wird cp
vor dem Überschreiben tatsächlich eine Aufforderung angezeigt.
Sie können dies über den folgenden alias
Befehl ü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 cp
es sich um einen Alias von handelt cp -i
.
Sie können ein \
vor dem cp
Befehl anhängen , um es ohne Alias zu verwenden.
\cp -fR source target
Standardmäßig cp
hat Aliase zu cp -i
. Sie können es überprüfen, eingeben alias
und 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 /to
stattdessen 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 -i
und -n
beide frühere Überschreibungsanweisungen abbrechen, dies -f
jedoch 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 command
aufzurufen, 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 -i
vom 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 -n
wird verhindert .