Mit GREP Files finden, die mit "._" beginnen

lukelukeluke

Erfahrenes Mitglied
Hallo leute,

Ich habe ein Verzeichnisbaum, in welchem ich die Files .DS_Store und alle Files die mit ._ anfangen (also ._*) löschen muss.
Ich habe also folgende Befehle um diese Files zu finden:

find /test | grep .DS_Store (das funktioniert schonmal)
find /test | grep ._ (hier findet es leider alle Files welche . und _ enthalten. ich habe es auch mit grep "._" oder grep '._' versucht: leider kein Erfolg. Die meisten Files beinhalten ja einen Punkt zur Dateiendung, somit werden mit meinem Befehl:

find /test/ | grep ._ | xargs rm

alle Files gelöscht, die eine Underleine und eine Dateiendung enthalten. Wie kann ich mich auf die "._"-Files beschränken? Das grep gibt zum Beispiel folgendes aus:

/test/Software/Drivers/Driver_ZyXeL/ZyAIR_B-100_wxp.zip

Löschen soll es aber nur solche Files:

/test/Software/Drivers/._File

Also ich nehme an alle Zeilen, welche sowas enthalten: /._
Vielen Dank für eure Hilfe!
luke
 
Hallo!

Und warum machst Du es nicht einfach so?
Code:
find /test/._*
Bzw. zum löschen so?
Code:
rm /test/._*
So werden alle Dateien im Verzeichnis "test", die mit einem "._" beginnen und beliebige weitere Zeichen enthalten, gefunden bzw. gelöscht.

grep ist ja nicht zum finden von Dateien da, sondern zum durchsuchen von Dateiinhalten.
Zum finden von Dateien benutzt man find.

Gruss Dr Dau
 
@threadi: Habe das gleich probiert und sieht schon sehr gut aus. Ich glaube damit sollte es gehen, muss noch prüfen ob es wirklich nur diese Dateien löscht aber ich glaube das ist die Lösung. Danke. (Habe irgendwie gar nicht daran gedacht das ohne grep zu machen :) )

@DrDau: Das würde schon gehen aber nur für ein Verzeichnis. Ich muss das über einen riesigen Verzeichnisbaum laufen lassen mit vielen Unterordnern...
 
Ach so..... konnte ich ja nicht riechen. ;)
Dann habe ich aber noch einen Verbesserungsvorschlag zum Beispiel von threadi.
Der Punkt gibt ja das aktuelle Verzeichnis als Startverzeichnis an.
Wenn Du also z.b. /home anstatt dem Punkt angibst, dann wird nur inerhalb von /home und den darin befindlichen Unterverzeichnissen gesucht.
Also so:
Code:
find /home -name "._*"
Dann ist es nämlich auch egal von wo aus der Befehl ausgeführt wird.
 
Ja auf jeden Fall, das muss schon ein absoluter Pfad sein.
Danke euch beiden nochmals für die Hilfe. Hier ist mein Shell-Script:
Code:
dir='/test/ordner'

echo "Performing cleanup on dir $dir"

find $dir -name "._*" | xargs rm >/dev/null
find $dir -name ".DS_Store" | xargs rm >/dev/null
 
Zurück