ubuntuusers.de

verschiedene Dateien per Bash Script löschen

Status: Ungelöst | Ubuntu-Version: Server 16.04 (Xenial Xerus)
Antworten |

zion2k

Anmeldungsdatum:
4. November 2007

Beiträge: 46

Hallo,

ich brauche mal Hilfe um mein Script weiter zu entwickeln. Bis jetzt habe ich einfach nach Namen und/oder Dateigröße mit diesem Befehl gelöscht. $1 übergibt das Verzeichnis.

find "$1" -type f -name ".nomedia" -exec bash -c "rm -vf '{}'" \; | wc -l
oder
find "$1" -type f -name *.png -size 592451c -exec bash -c "rm -vf '{}'" \; | wc -l

Nur sind in letzter Zeit immer mehr Dateien hinzugekommen und ich suche eine einfachere Lösung als jede mit einer eigenen Zeile hinzuzufügen. Zur Zeit sammele ich alle ungewollten Dateien in einem seperaten Verzeichnis. Gibt es eine Möglichkeit alle Dateien die in diesem Verzeichnis sind auch in dem Verzeichnis $1 zu löschen? Am besten nicht nur nach Dateinamen oder auch nach Namen+Größe.

Wer kennt sich da aus und kann mir helfen?

Gruß Christian

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Wer sich auf jeden Fall auskennt, ist man find - und das ist damit immer die 1. Quelle.

zion2k schrieb:

find "$1" -type f -name *.png -size 592451c -exec bash -c "rm -vf '{}'" \; | wc -l

Das ist gefährlich, so unge"quotet" !
- denn dann expandiert die Shell den * zu einer Liste, und die hat nichts mit dem Zielverzeichnis zu tun. → unbedingt 'quoten', dann kommt der * auch bei find an !

Und: Du kannst besser die Option -delete benutzen, die ist schneller und einfacher.

Nur sind in letzter Zeit immer mehr Dateien hinzugekommen und ich suche eine einfachere Lösung als jede mit einer eigenen Zeile hinzuzufügen.
...
Gibt es eine Möglichkeit alle Dateien die in diesem Verzeichnis sind auch in dem Verzeichnis $1 zu löschen? Am besten nicht nur nach Dateinamen oder auch nach Namen+Größe.

Es gibt viele Möglichkeiten. Du kannst z.B. eine ganze Liste an Dateinamen an einen find- Befehl verfüttern.

LG,

track

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13219

track schrieb:

zion2k schrieb:

find "$1" -type f -name *.png -size 592451c -exec bash -c "rm -vf '{}'" \; | wc -l

Das ist gefährlich, so unge"quotet" !

Es gibt noch mehr Probleme mit dieser Zeile, denn die Übergabe des Dateinamens an den Befehl rm ist unsicher. Das gleiche Problem habe ich hier bereits erläutert. Besser:

1
find "$1" -type f -name '*.png' -size 592451c -exec rm -vf {} + | wc -l

Angenehmer Nebeneffekt: es werden mehrere Dateinamen an einen rm-Prozess übergeben. Noch besser ist

1
find "$1" -type f -name '*.png' -size 592451c -delete -print | wc -l

Falls Dateinamen mit Zeilenumbrüchen existieren, kann die Ausgabe von wc falsch sein. Dann besser so:

1
find "$1" -type f -name '*.png' -size 592451c -delete -printf \\n | wc -l
Antworten |