Wusstest du, dass `find` und `xargs` zusammen echte Superkräfte haben? 🦸

`find . -name "*.log" -mtime +30 | xargs rm -f`

Löscht alle Logs älter als 30 Tage. Einmal verstanden, nie wieder vergessen – und plötzlich hat die Festplatte wieder Luft zum Atmen. 💾

Ja, die Shell ist keine Benutzeroberfläche. Sie ist ein Werkzeugkasten. 🔧

#Linux #Shell #CommandLine #FreieSoftware #TippDesNachts

@reeeen @Doppellhelix wo ist der unterschied zu -exec {} ? Nutze xargs fast nie. 🤔
@saiki @Doppellhelix
-exec {} \; → wenn du pro Datei einen eigenen Befehl brauchst (selten nötig)
-exec {} + → der sichere Allrounder, sollte dein Default sein
xargs → wenn du die Pipe-Flexibilität brauchst, z.B. mit xargs -P 4 für parallele Ausführung, oder wenn die Quelle kein find ist
@reeeen @Doppellhelix parallele Ausführung klingt gut. Muss ich mich mal einlesen. 🙈 Danke dir 🤛🏼

@reeeen Find hat auch einen Parameter „-delete“ - man muss also nicht rm aufrufen.

Und falls jemand Schweinekram macht mit Zeilenumbrüche im Dateinamen, ist dein Befehl ein Kandidat für „Hoffentlich gibt es ein Backup“.

Die Lösung: find . … -print0 | xargs -0 …
Da wird nicht der Zeilenumbruch sondern ein Null-Byte als Trennsymbol verwendet. Schadet nie, ist oft sicherer.

@flx Yep, gibt oft wichtige Details. Aber wenn man weiß was man macht, doch sehr wirkungsvoll.

@reeeen @chpietsch Vorsicht vor Leerzeichen in Verzeichnis- oder Dateinamen. Damit kann diese Kommandozeile schnell gefährlich werden.

GNU find hat deshalb eine Option -print0, mit der die gefundenen Dateien mit binär Null getrennt werden, und xargs hat dazu passend eine Option -0. In dem Beispiel also:

find . -name "*.log" -mtime +30 -print0 | xargs -0 rm -f

Andererseits: löschen kann find auch alleine:

find . -name "*.log" -mtime +30 -delete