Kombinieren mehrerer Befehle in einer einzigen Zeile

8

Ich hatte ein Verzeichnis mit dem Namen, mynamedas archiviert wurde myname.tar. Jetzt möchte ich es nehmen myname.tar, die Archivierung aufheben und alle Dateien im mynameVerzeichnis 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?

Michael Mrozek
quelle
6
Versuchen Sie stattdessen , Ihre |Symbole durch ;find -name deleteme.tar; tar -xvf deleteme.tar; rm -r delete/*
Folgendes zu
1
Die Befehlssequenz macht für mich nicht viel Sinn. Es lautet wie folgt: TAR-Datei suchen, TAR-Datei extrahieren, extrahierte Inhalte löschen. Ist der Zweck, die Festplatte zu trainieren?
jw013
Ich habe den Eindruck, dass das OP nach etwas Ähnlichem sucht find ... -execund nicht nach etwas so Einfachem wie ;.
jw013

Antworten:

28

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

Paweł Rumian
quelle
humbug.in/docs/the-linux-training-book/ch08s01.html ist für mich ein toter Link.
Isakbob
7

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, wenn findIhre Datei nicht gefunden werden kann, wird nicht versucht, nichts zu komprimieren :

find -name deleteme.tar && tar xvf deleteme.tar && rm -r delete/* || echo "something went wrong" 1>&2

Nur ein kleiner Vorschlag ...

Polemon
quelle