Linux - find -pipe> RAR - wo ist der Fehler im Befehl?

3 Antworten

Du leitest Ausgabe mittels redirection in eine Datei um, statt per pipe zu einem anderen Befehl. Jedenfalls im Titel deiner Frage.

Danach verwendest du -exec, und dass der folgende Befehl für jede gefundene Datei erneut ausgeführt wird, ist richtig. Das ist, wie -exec funktioniert.

Zwar könntest du die Liste der gefundenen Dateien als Argumente an rar übergeben, aber da nicht garantiert werden kann, dass diese Liste nicht zu lang ist, würde ich einen anderen Weg gehen:

rar akzeptiert den Namen einer Datei, enthaltend eine Liste von Dateinamen, wenn ein @ vor den Dateinamen gesetzt wird. Die Ausgabe von find bräuchtest du dafür lediglich in eine Datei umleiten, mittels redirection, und anschließend diese als Dateiliste für rar angeben.

Woher ich das weiß:Hobby – langjähriger Implementator von Skurrilem
HarryXXX  07.09.2023, 08:56

Eine exec Variante sollte auch möglich sein, aber dann müsste man doch die Dateien zu einem existierenden Archiv hinzu fügen. Von daher halte ich die Listen-Eingabe für effektiver.

1
Bushmills145  07.09.2023, 10:31
@HarryXXX

Ja, möglich ist das auch - aber ob es sinnvoll ist, für jede Datei erneut das Kompressionsprogramm aufzurufen, ist damit natürlich nicht gesagt. Rar hingegen nur einmal aufzurufen, und in einem Aufwasch alle Dateien ins Archiv zu packen scheint mir eine deutlich bessere Lösung.

0
xXxNightmarexXx 
Fragesteller
 09.09.2023, 15:09

Das muss ich mir nochmal anschauen. Die Option in RAR hatte ich nicht gefunden.

0
Bushmills145  09.09.2023, 19:01
@xXxNightmarexXx

rar <command> [‐<switch 1> ‐<switch N>] archive [files...] [@listfiles...] [path_to_extract] ...

0

Ich verstehe nicht ganz dein Problem. Wenn du sagst, dass alle Dateien älter als n Sekunden gefunden werden sollen, und diese vom rar-Kommando nicht gelöscht werden, dann werden die natürlich auch beim nächsten Durchlauf wieder gefunden. Sie sind ja nur noch älter geworden. Alles funktioniert also richtig.

Du kannst dir jetzt überlegen die Dateien wegzukopieren oder den Suchradius anders einzuschränken (find hat sicherlich auch ein "jünger als").

(Nebenbei: ich staune, dass heute irgendwer noch RAR verwendet.)

HarryXXX  07.09.2023, 08:59

Unter Windows hat rar tatsächlich noch eine gewisse Verbreitung. Verwendet hätte ich das aber nur, wenn es dafür eine gezielte Anforderung gegeben hätte. Freiwillig nicht 😊

2
jo135  07.09.2023, 09:39
@HarryXXX

Ja, technisch gesehen ist RAR eigentlich ein tolles Format (wesentlich mehr als das eigentlich total primitive ZIP oder komprimierte Tarballs). Aber die meisten Features braucht heute kein Mensch mehr. Für mich ist das ein Phänomen der 90er bis frühen 2000er.

0
HarryXXX  07.09.2023, 10:02
@jo135

Unter *nix sind komprimierte tarballs oder Zip Archive immer noch die am meisten verwendeten. Ich bin seit Mitte der 80er dabei, aber RAR ist mir eigentlich nie dabei unter gekommen. Und unter Windows ist 7zip eigentlich ideal, weil es die eierlegende Wollmilchsau ist.

0
xXxNightmarexXx 
Fragesteller
 09.09.2023, 15:07
@HarryXXX

Das stimmt. - Wieso nicht freiwillig? Wo ist denn das Problem daran?

0
xXxNightmarexXx 
Fragesteller
 09.09.2023, 15:00

Wieso sollte man nicht RAR verwenden?

Ist tatsächlich mein Favorit in dem Sinne, dass ich kaum sonst Archive nutze, wenn dann nur mit Windows in Kombi.

Dementsprechend halt RAR, da ZIP nicht so gut ist wie RAR. ZIP ist zwar deutlich mehr verbreitet aber das neueste RAR 5 ist glaube ich was die Qualität der Kompression usw. an geht immer noch von allen mit auf dem Ersten Platz.
Außerdem halt zusätzlich Gewohntheit. WinRAR ist eines der ersten Programme die ich auf dem PC installiere, sowie eins was an sich immer mit drauf ist und auch schon seit dem ich PCs besitze/bedienen kann xP

0

Auf den ersten Blick sehe ich da weder eine pipe noch eine redirection.

Die exec Option wird für jedes gefundene Objekt ausgeführt.

Lass dir doch erstmal anzeigen, was überhaupt gefunden wird. Vielleicht siehst du dann schon das Problem und die Lösung.

xXxNightmarexXx 
Fragesteller
 07.09.2023, 01:22

Achso, ja stimmt. Vorher hab ich es mit pipe versucht. Das ging irgendwie garnicht. Müsste ich nochmal schauen. Den Befehl hab ich auch noch irgendwo.

Also wenn ich den Befehl so ausführe, bekomme ich die Dateien samt Pfad aufgelistet.

Gehe jetzt aber erstmal pennen. Vielleicht hat ja morgen schon jemand ne Antwort drauf.

Ansonsten ne Nacht drüber schlafen und nochmal mit mehr Energie sich das ganze anschauen wird wahrscheinlich auch helfen.

Hab ich mir auch gedacht, das exec das bei jeder Datei tut. Trotzdem was mich dabei dann ein wenig verwirrt ist die Tatsache, dass beim ersten Durchlauf schon alle Dateien drin sind. Müssten dann nicht theoretisch bei jedem Durchlauf die einzelnen Dateien mit exec den Befehl ausführen? Und nicht quasi jedes Mal dann alle?

0
HarryXXX  07.09.2023, 10:04
@xXxNightmarexXx

Tja, ich hab es mal der Einfachheit halber mit tar ausprobiert. Das funktoniert auch mit exec problemlos. Wie ein anderer User aber bereits geschrieben hat, passt sehr wahrscheinlich deine Zeitauswahl nicht, weshalb Du bei jeder Ausführung die alten Dateien immer wieder dazu erhältst. Das gleiche Problem würdest Du allerdings auch mit einer "Listenverarbeitung" haben.

0
HarryXXX  07.09.2023, 11:02
@xXxNightmarexXx

Eine Pipe Version könnte so aussehen

 find /usr/sbin -type f -name mk* | xargs -n 1 tar -uf test2.tar

Ich hab mich jetzt nicht mit rar auseinander gesetzt und natürlich fehlen noch deine gewünschten Zeitangaben.

Und denk dran, dass cron nicht die Userumgebung zur Verfügung hat.

0