Bash - Bestimmte Files suchen und durch andere ersetzen?

Pat

Commander
Registriert
Jan. 2003
Beiträge
2.255
Hiho,

Ich suche ein bash-script für folgendes:

  1. Durchsuche rekursiv alle Unterordner nach einem gewissen Filetyp, also z.B. alle Files mit Endung *.xyz
  2. Für jedes gefundene File:
  3. a) Lösche dieses File (sagen wir es heisst bla.xyz)
  4. b) Erstelle an dieser Stelle ein neues, leeres File "bla.xyz.del"

Hier gibts doch bestimmt Bash-Cracks, die sowas im handumdrehen können? :-)

Ich werde das File auf ein paar hundert Gigabyte loslassen, also sollte es insbesondere mit "langem Konsolenoutput" klarkommen - ich habe mal gelesen, da gibt es irgendwie manchmal Probleme.

Lg und Danke schonmal :)
 
Du könntest dir eine schleife bauen.

for f in $(grep *.xyz *) ; do rm $f ; touch file2 ; done


Sowas in der Richtung, allerdings bin ich gerade nicht in der Lage was richtiges zu bauen...
mit grep suchst du dateien, mit rm löschst du sie und mit touch erstellst du leere. Wie schleifen funktionieren kannst du ja mal ausprobieren und nachlesen...

ich hoffe ich konnte dir zumindest ein bisschen helfen.


liebe Grüße


//Edit: ich würde noch mit echo ausgeben lassen was er eigentlich gerade löscht und die Änderungen vielleicht in eine Datei schreiben
 
Ich würde das in zwei Schritten erledigen.

1. .del dateien erstellen

- find /path/of/files -type f -name "*.xyz" > /tmp/liste-an-zu-loeschenden-dateien.txt
- sed -i -e 's@\.xyz$@.xyz.del@g' /tmp/liste-an-zu-loeschenden-dateien.txt
- xargs -a /tmp/liste-an-zu-loeschenden-dateien.txt -d "\n" touch

2. .xyz dateien loeschen

- find /path/of/files -type f -name "*.xyz" -print0 | xargs -0 rm

ACHTUNG: Alles komplett ungetestet und frei ausm Kopf
 
Würde sogar als Einzeiler funktionieren:

Code:
find /pfad/zu/dateien -name '*.xyz' -exec rm "{}" \; -exec touch "{}.del" \;

Aber Achtung: Immer vorher an einem Testverzeichnis ausprobieren oder "-exec" durch "-ok" ersetzen. Dann wird vor jedem Befehl nachgefragt, ob man ihn ausführen will.
 
Vielen Dank für alle eure Hilfe!
Ich habe noch in stwe's Lösung -exec durch -execdir ersetzt, da dies laut manpage sicherer ist.

Hat 1A geklappt :-)
 
Zurück
Oben