Wie kann ich mit der Option -exec in Linux über den Find-Befehl mehrere Ausdrücke ausführen?

Wie kann ich mit der Option -exec in Linux über den Find-Befehl mehrere Ausdrücke ausführen?

Ich habe den Beitrag gelesen unterWie führe ich mehrere Befehle aus, wenn ich find verwende?. Sofern ich die gegebene Antwort nicht missverstanden habe, glaube ich nicht, dass sie die Lösung bietet, die ich suche.

Meine Anforderung besteht darin, einen bestimmten Satz von Dateien zu finden. Wenn diese gefunden wurden, soll ein Verzeichnis erstellt werden. Erst wenn das Verzeichnis erfolgreich erstellt wurde, sollen die Dateien extrahiert werden. Nach dem Extrahieren sollen die Quelldateien gelöscht werden. Wie kann ich das erreichen?

Antwort1

Der Link, den Sie posten, gibt meiner Meinung nach die „richtige“ Antwort. Erzeugen Sie einfach eine Shell. Ohne dies wird Ihr Werkzeugkasten nicht groß genug sein. SiekönnteErstellen Sie einen Suchbefehl in Pseudocode wie:

find /path -criteria -exec mkdir {} \; -exec extract {} \; -exec rm {} \;

Dies wird bei jedem Fehler gestoppt, da Prädikate natürlich mit „und“ verknüpft werden. Sie haben jedoch keine ausreichende Kontrolle über die Benennung des Verzeichnisses. Es schlägt garantiert fehl.

Das Erstellen einer Shell löst dieses Problem, da Ihnen dann die gesamte Shell-Sprache zur Verfügung steht:

find /path -criteria -exec /bin/sh '
    for d; do
        mkdir "${d##*/}" && tar xvf "$d" && rm "$d"
    done' _ {} +

Beachten Sie, dass diese Version den Nebeneffekt hat, dass bei einem Fehler für jede Iteration der Schleife weitergemacht wird - es wird eine einzelne Shell füralleErgebnisse. Ich würde vorschlagen, die Shell mit dem Flag -e zu starten, wenn Sie bei einem Fehler abrupt abbrechen möchten.

verwandte Informationen