wie man cp stoppt: './xxx' überschreiben? Prompt

19

Wie kann ich verhindern, dass der Befehl cp zum Überschreiben auffordert? Ich möchte alle Dateien überschreiben, ohne immer wieder zum Terminal zurückkehren zu müssen. Da es sich um große Dateien handelt, kann die Fertigstellung einige Zeit in Anspruch nehmen.

Ich habe versucht, die Option -f zu verwenden. Es wird immer noch gefragt, ob ich überschreiben möchte.

   -f, --force
          if an existing destination file cannot be opened, remove it and
          try again (redundant if the -n option is used)

cp -f /media/somedir/somefiles* .  
cp: overwrite `./somefilesxxx'? y
Nelaaro
quelle

Antworten:

17

Zusätzlich zum Anrufen /bin/cpkönnen Sie eine der folgenden Aktionen ausführen:

\cp -f ...
command cp -f ...

Ich stimme jedoch zu, dass Sie sich nicht an die Verwendung eines Alias ​​wie cp -ioder gewöhnen sollten. rm -iWenn Sie sich an eine andere Shell setzen, haben Sie nicht das Sicherheitsnetz, auf das Sie angewiesen sind.

Glenn Jackman
quelle
1
A whereis cpwird zeigen, wo der Befehl ist. So können Sie den echten Befehl anstelle des Alias ​​aufrufen.
AnthonyB
12

Nachdem Sie diese Lösung gesehen haben. Ich konnte sehen, dass die Bash-Alias-Funktion die Probleme verursachte. http://systembash.com/content/prompt-to-confirm-copy-even-with-cp-f/

which cp  
alias cp='cp -i'
/bin/cp
which cp | grep cp
alias cp='cp -i'
/bin/cp

Er empfiehlt

unalias cp

Ich möchte immer noch den Alias ​​behalten, den ich einfach nicht auf diese Instanz anwenden möchte. Meine Lösung besteht darin, die Binärdatei mit einem vollständigen Pfad zu verwenden, damit die Bash-Alias-Funktion nicht übernommen wird. Das funktioniert ganz gut

/bin/cp -f /media/somedir/somefiles* .  
Nelaaro
quelle
4

Leider hat der Befehl copy "cp" unter Linux keine Option, diese Frage automatisch mit "y" oder "n" zu beantworten. Es gibt mehr als eine Lösung für dieses Problem, je nachdem, was Sie tun möchten. Eine Lösung besteht darin, den Unix-Befehl "yes" zu verwenden. Dieser Befehl gibt einen String wiederholt aus, bis er beendet wird.

Wenn wir alle Dateien im Zielverzeichnis überschreiben möchten, können Sie mit dem Befehl "yes" alle Fragen mit einem "y" beantworten. "y" ist ein Standardwert, der nicht angegeben werden muss.

yes | cp source/*.txt destination/.

Wenn Sie vermeiden möchten, dass Dateien im Zielverzeichnis überschrieben werden, können Sie den Befehl "yes" verwenden, um alle Fragen mit einem Nein "n" zu beantworten.

yes n | cp source/*.txt destination/.

Verwenden Sie "man yes", um weitere Informationen zum Befehl "yes" zu erhalten.

Michael Sundell
quelle