Argument List too Long – Part 2

So, jetzt zum nächsten Problem. Sie haben ein Verzeichniss das hunderte oder tausende von bildern enthält. Von einer Webcam z.B.

Sie wollen alle Bilder von einem bestimmtem Datum in ein ZIP packen.

Der Trick mit dem grep vom anderen Post bringt sie da nicht wirklich weiter. Richtig. Also nutzen wir etwas anderes. Wie wäre es mit find. Also einfach mal die code Zeile angeben und ich breche sie dann in Stücke. Zur info, unser Beispiel findet am 13ten statt und wir wollen Bilder vom 10ten.

find . -name "*.jpg" -daystart -mtime 4 -exec cp -p {} ../archive_2007-03-09 ;

1. find – sucht uns alle Dateien die im namen „*.jpg“ drin haben raus. Dass heisst wir bekommen eine saubere Liste mit den Namen der Bilder.

2. Mit daystart sagen wir dass unser Zählen / Datums / Zeitangabe vom Anfang des Tages statt findet, also von 0 Uhr.

3. mtime 3 – sagt aus das es vor 3 Tagen war

4. exec cp – wir führen einen copy Befehl aus und die {} sind die Platzhalter für jedes gefundene Item. Mit dem „-p“ bewirken wir das unsere Datums und Zeit Angaben der Datei beibehalten werden.

5. und das Ganze stopfen wir in irgend einen Ordner

– WICHTIG: Am ender der Zeile befindet sich ein lehr Zeichen, ein Backslash und ein Strichpunkt. Dies muss so sein damit „exec“ weiss das hier ende der Fahnenstange ist, da man ja auch für exec mehrere Befehle an einander ketten könnte.

Jetzt kann man einfach den Ordner schnappen und in ein zip stopfen.

Ja man könnte das Ganze gleich in ein zip stopfen, muss aber beachten das für jedes Item das gefunden wird exec aufgerufen wir und somit zip gestartet, das archiv geöffnet, die datei reingelegt und das zip wieder geschlossen wird. Hat man also viel Zeit kann man es direkt in ein zip werfen. Will man schneller vorgehen macht man lieber den zwischenschirtt mit dem copy Befehl.