Ich hatte ein Verzeichnis mit dem Namen, myname
das archiviert wurde myname.tar
. Jetzt möchte ich es nehmen myname.tar
, die Archivierung aufheben und alle Dateien im myname
Verzeichnis löschen (nach der Aufhebung der Archivierung).
Hier sind meine Befehle für die obige Aufgabe:
find -name deleteme.tar
tar -xvf deleteme.tar
rm -r delete/*
Diese einzelnen Befehle funktionieren einwandfrei, aber ich benötige einen einzeiligen Befehl. Deshalb habe ich Folgendes versucht:
find -name deleteme.tar | tar -xvf deleteme.at | rm -r delete/*
Ich habe diesen Fehler erhalten:
"rm -r deleteme/*
rm: cannot remove `deleteme/*': No such file or directory "
Was mache ich falsch?
|
Symbole durch;
find -name deleteme.tar; tar -xvf deleteme.tar; rm -r delete/*
find ... -exec
und nicht nach etwas so Einfachem wie;
.Antworten:
Die gesuchten Symbole werden als Steuerungsoperatoren bezeichnet . Sie verwenden die falschen - Sie brauchen
;
oder&&
.Mit
;
werden Befehle der Reihe nach ausgeführt, und es spielt keine Rolle, ob der vorherige mit Erfolg endete oder nicht.Mit verhindert
&&
jeder fehlgeschlagene Befehl die Ausführung der nächsten Befehle.Sie können mehr zum Beispiel in 8.1 lesen . Bediener steuern
quelle
Wenn Sie bash verwenden, kann ich vorschlagen, dass Sie die Manpage von bash (
man bash
) lesen und nach "control operator" ( /control operator+ [Enter]) suchen .Dort werden die verschiedenen Funktionen von Dingen wie
|
und;
erklärt.Vielleicht möchten Sie jedoch die Verwendung von
&&
anstelle von;
prüfen. In diesem Fall können Sie die folgenden Funktionen in dieser Reihenfolge nur ausführen, wenn die vorherige erfolgreich war. Das heißt, wennfind
Ihre Datei nicht gefunden werden kann, wird nicht versucht, nichts zu komprimieren :Nur ein kleiner Vorschlag ...
quelle