it-swarm.com.de

So erzwingen Sie das Überschreiben von cp ohne Bestätigung

Ich versuche, den Befehl cp zu verwenden und ein Überschreiben zu erzwingen.

Ich habe cp -rf /foo/* /bar versucht, werde aber trotzdem aufgefordert, jedes Überschreiben zu bestätigen.

580
thiyagu114

Du kannst yes | cp -rf xxx yyy machen, aber mein Gefühl sagt, dass wenn du es als root machst - dein .bashrc oder .profile einen Alias ​​von cp bis cp -i hat Moderne Systeme (hauptsächlich RH-Derivate) machen das mit Stammprofilen.

Sie können vorhandene Aliase überprüfen, indem Sie alias an der Eingabeaufforderung ausführen, oder which cp, um Aliase nur auf cp zu überprüfen.

Wenn Sie einen Alias ​​definiert haben, wird dieser durch Ausführen von unalias cp 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 mit Alias ​​versehene Version eines Befehls verwenden, indem Sie \ voranstellen, z. \cp whatever

1001
favoretti

Dies wird wahrscheinlich dadurch verursacht, dass cp bereits auf etwas wie cp -i eingestellt ist. Der direkte Aufruf von cp sollte funktionieren:

/bin/cp -rf /zzz/zzz/* /xxx/xxx

Eine andere Möglichkeit, dies zu umgehen, ist die Verwendung des Befehls yes:

yes | cp -rf /zzz/zzz/* /xxx/xxx
253
pgl

Wie in einigen anderen Antworten angegeben, verwenden Sie wahrscheinlich irgendwo einen Alias, der cp auf _cp -i_ oder etwas Ähnliches abbildet. 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 Aliase, die Sie cp genannt haben.

108
Chris

Sie haben wahrscheinlich irgendwo einen Alias, der cp auf cp -i abbildet. denn mit den Standardeinstellungen fordert cp nicht zum Überschreiben auf. Überprüfen Sie Ihren .bashrc, Ihren .profile usw.

Siehe cp manpage : Nur wenn der Parameter -i angegeben ist, wird cp tatsächlich vor dem Überschreiben gefragt.

Sie können dies mit dem Befehl alias überprüfen:

$ alias
alias cp='cp -i'
alias diff='diff -u'
....

Verwenden Sie zum Aufheben der Definition des Alias ​​Folgendes:

$ unalias cp
55
codeling

Wie andere Antworten angegeben haben, könnte dies passieren, wenn cp ein Alias ​​von cp -i ist.

Sie können einen \ vor dem cp Befehl anhängen, um ihn ohne Alias ​​zu verwenden.

\cp -fR source target
43
Arnold Roa

Standardmäßig hat cp den Aliasnamen cp -i. Sie können es überprüfen, alias eingeben 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 einfach den Befehl /bin/cp /from /to anstelle von cp /from /to

18
cp -u ...
cp --update ...

funktioniert auch.

7
softwarevamp

cp ist normalerweise so ausgerichtet

alias cp='cp -i'   # i.e. ask questions of overwriting

wenn Sie sicher sind, dass Sie das Überschreiben durchführen möchten, gehen Sie wie folgt vor:

/bin/cp <arguments here> src dest
7
user5035029

Eine andere Möglichkeit, den Befehl ohne Alias ​​aufzurufen, ist die Verwendung der in bash integrierten Funktion command.

command cp -rf /zzz/zzz/*

5
Steve Buzonas

sie können diesen Befehl auch verwenden:

cp -ru /zzz/zzz/* /xxx/xxx

es würde jedoch Ihre vorhandene Datei mit der neueren aktualisieren.

5
sigeje

Wenn Sie den Alias ​​auf globaler Ebene beibehalten und nur für Ihr Skript ändern möchten.

Benutz einfach:

alias cp = cp

und dann schreiben Sie Ihre Follow-up-Befehle.

2
Ankit Bhatnagar

-n ist "nicht zu überschreiben", aber seine Frage ist genau das Gegenteil von 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 Quelldatei Ziel

2
Rohit Rajput

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
0
Maat