ubuntuusers.de

find -exec funktionierte nicht richtig.

Status: Ungelöst | Ubuntu-Version: Server 14.04 (Trusty Tahr)
Antworten |

ThomasDr

Anmeldungsdatum:
18. Februar 2016

Beiträge: 24

Hallo,

Ich wollte mal ein Backup aller Wireshark files machen und nutze diesen Befehl:

1
find /media/thomasd/ -type f -iname "*.eth" -o -iname "*.pcap" -o -iname "*.pcapng" -o -iname "*.pcapdump" -exec mv "{}" /mnt/backup3/Wireshark/ \;

Leider wurden mit diesen Befehl nicht alle Dateien kopiert, der Befehl funktionierte nur ohne die -o Option, also:

1
find /media/thomasd/ -type f -iname "*.eth"-exec mv "{}" /mnt/backup3/Wireshark/ \;

usw.

Ein einfaches:

1
find /media/thomasd/ -type f -iname "*.eth" -o -iname "*.pcap" -o -iname "*.pcapng" -o -iname "*.pcapdump"

Lieferte mir aber die komplette Liste.

Wo dran könnte das liegen?

Schöne Grüße Thomas

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

ThomasDr schrieb:

Wo dran könnte das liegen?

Dass Du die Ausdrücke nicht passend klammerst.

1
find /media/thomasd/ -type f \( -iname "*.eth" -o -iname "*.pcap" -o -iname "*.pcapng" -o -iname "*.pcapdump" \) -exec mv "{}" /mnt/backup3/Wireshark/ \;

Du kannst es noch etwas effizienter machen:

1
find /media/thomasd/ -type f \( -iname "*.eth" -o -iname "*.pcap" -o -iname "*.pcapng" -o -iname "*.pcapdump" \) -exec mv -t /mnt/backup3/Wireshark/ {} +

Ciao

robert

ThomasDr

(Themenstarter)

Anmeldungsdatum:
18. Februar 2016

Beiträge: 24

Hall0,

das ist die Frage ob Klammern hier eine Wirkung haben, da es sich ja alles um ODER Verbindungen handelt. Und der Befehl ohne -exec ja alle Dateien richtig ausgegeben hat. Oder gibt es da eine Erklärung? Ich teste das mal-

Schöne Grüße Thomas

ThomasDr

(Themenstarter)

Anmeldungsdatum:
18. Februar 2016

Beiträge: 24

Hallo,

Ja, mit Klammern geht es ohne wird nur der letzte Ausdruck gesucht, aber wie so?

Schöne Grüße Thomas

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Lies mal in man find die Logik der Optionen durch: das Beispiel mit find . -path ./src/emacs -prune -o -print und vor allem den Absatz OPERATORS !

Zwei Optionen hintereinander sind immer mit einem impliziten AND verknüpft, und das hat eine höhere Präzedenz (also Vorrang) als das ODER.
Bildlich geklammert sieht Deine Kommandozeile also so aus:

find /media/thomasd/ -type f -iname "*.eth" -o -iname "*.pcap" -o -iname "*.pcapng" -o  (  -iname "*.pcapdump" -exec mv "{}" /mnt/backup3/Wireshark/  )  \;

Und weil nachfolgende Ausdrücke gar nicht mehr ausgewertet werden, wenn bei OR ein vorheriger Ausdruck passt, fällt Dein -exec dann auch mit weg.

So einfach ist das, wenn man es strikt logisch betrachtet, anhand der Vorgaben des Manuals.

LG,

track

Antworten |