[gelöst]Frage zu einem Miniscript mit find + rm

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
schwedenmann
Beiträge: 5525
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

[gelöst]Frage zu einem Miniscript mit find + rm

Beitrag von schwedenmann » 12.02.2023 13:29:46

Hallo

ich habe folgendes "Miniscript" erstellt
verzeichnis=/home/backupetc
cd $verzeichnis
pwd
anzahl=$(find -iname "*tar.gz" | wc -l)
find -iname "*tar.gz" -mtime +31 -exec rm -I {} \;
echo gelöschte Anzahl von Dateien = $anzahl
Das Script tut was es soll,es löscht alle Dateien mit *tar.gz im Verzeichnis /home/backupetc die älter als 31 Tage sind.

Aber der Parameter -I, aber auch --interactive=once von rm wird ignoriert,wieso ?

shell ist auf dem System die bash, das Script wird als root ausgeführt

mfg
schwedenmann
Zuletzt geändert von schwedenmann am 12.02.2023 15:15:11, insgesamt 2-mal geändert.

Benutzeravatar
TRex
Moderator
Beiträge: 8038
Registriert: 23.11.2006 12:23:54
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: KA

Re: Frage zu einem Miniscript mit find + rm

Beitrag von TRex » 12.02.2023 14:04:37

Der wird eher nicht ignoriert, aber kontrolliere mal die Anzahl der Aufrufe von rm. Das wird so zerstückelt, dass es in die cmdline passt.

Und fix die Copy-Pasta-Fehler im Script - wieso existieren die überhaupt (hint: fehlende abschließende Klammer)? :lol:
Jesus saves. Buddha does incremental backups.
Windows ist doof, Linux funktioniert nichtDon't break debian!Wie man widerspricht

schwedenmann
Beiträge: 5525
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: Frage zu einem Miniscript mit find + rm

Beitrag von schwedenmann » 12.02.2023 14:11:19

Hallo

@TRex
Und fix die Copy-Pasta-Fehler im Scrip
Nix copy and paste, aus dem kopf rekonstruiert :mrgreen:


bei den Ausführungen des Scripts (auf rund 8 OS auf einem Multibootpc) waren das meist 28 Dateien,die gelöscht wurden,da hätte doch -I ausgewertet werden sollen (-I soll ja bei mehr als 3 Dateien zum Zuge kommen).

mfg
schwedenmann

chrbr
Beiträge: 547
Registriert: 29.10.2022 15:53:26

Re: Frage zu einem Miniscript mit find + rm

Beitrag von chrbr » 12.02.2023 14:28:11

schwedenmann hat geschrieben: ↑ zum Beitrag ↑
12.02.2023 14:11:19
(... -I soll ja bei mehr als 3 Dateien zum Zuge kommen).
Bei dem Aufruf von find werden aber die rm einzeln auf jede gefundene Datei angewendet. Deshalb funktioniert -I nicht. Dagegen sollte -i ok sein, wobei das bei vielen Funden natürlich lästig werden kann.

Ich habe es nicht getestet, aber ein find SONSTWAS | xargs TUWAS sollte die gefundenen Dateien auf einen Rutsch ausliefern. Ich weiß aber nicht aus dem Stand, wie man das an rm -I über den xargs Aufruf übergibt.

EDIT: In der amn page von xargs ist ein Beispiel wie folgt:

Code: Alles auswählen

       find /tmp -name core -type f -print0 | xargs -0 /bin/rm -f
Kommentar in der man page:
Find files named core in or below the directory /tmp and delete them, processing filenames in such a way that file or directory names containing spaces or newlines are correctly handled.

schwedenmann
Beiträge: 5525
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: Frage zu einem Miniscript mit find + rm

Beitrag von schwedenmann » 12.02.2023 15:14:54

Hallo

Bei dem Aufruf von find werden aber die rm einzeln auf jede gefundene Datei angewendet. Deshalb funktioniert -I nicht.
Jetzt habe ich es kapiert :facepalm:

-i funktioniert, aber da ich 28x J bzw. Y eintippen mußte,war ziemlich blöd.Deshalb habe ich versucht,wenigstens,aus Sicherheitsgründen,nur 1x zu bestätigen, per -I oder --interactive=once,was ja dann aus obigem Grund,nicht funktionierte.



mfg
schwedenmann

tobo
Beiträge: 1964
Registriert: 10.12.2008 10:51:41

Re: [gelöst]Frage zu einem Miniscript mit find + rm

Beitrag von tobo » 12.02.2023 16:02:52

Die find-Lösung dazu ist, in der Ausgangszeile einfach "\;" durch "+" ersetzen und man kann sich folgend print0/xargs-0 sparen. Mit + werden alle ermittelten Dateien (sofern die Länge es zulässt) in einem Rutsch übergeben, mit \; einzeln.

Antworten