Wusstet ihr, dass `find` und `xargs` zusammen echte Superkräfte haben?

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

Löscht alle .log-Dateien älter als 30 Tage. Einmal verstanden, nie wieder vergessen – und das Terminal fühlt sich plötzlich weniger einschüchternd an. 🐧✨

#Linux #Terminal #CLI #FreieSoftware #TippDesAbends

@reeeen

find hat dafür -exec, damit umgehst du einige Probleme wie z.B. Leerzeichen in Dateinamen, die du sonst mit | xargs hättest.

In deinem Fall gibt es sogar direkt -delete
$ find . -name "*.log" -mtime +30 -delete

@reeeen neulich hattest du noch in deinem Beitrag erwähnt; erstmal bei "xargs echo", statt "xargs rm" zu nehmen - für die nicht so Risikofreudigen 😉
@reeeen Nur wenn keine Whitespaces in den Dateinamen sind. Robuster: find . -name "*.log" -mtime +30 -print0 | xargs -0 rm

@reeeen

Und wenn es zu viele Dateien sind, läuft die Kommandozeile über. Daher besser die Option -delete nehmen.

@caravantraveller @reeeen da muss ich leider widersprechen: sowohl `find -exec {} +` als auch xargs starten das angegebene Programm nur mit so vielen Parametern, wie die Kommandozeile verträgt und sammeln dann weier für den nächsten auruf.

@errror @reeeen

Stimmt. xargs passt auf. Nur wenn man die Liste in einem Sub-Kommando zurückgibt, kann das passieren.

Sub-Kommando geht mit $(...) oder in veralteter Form mit Backticks `...`