Dateien mit best. Attributen innerhalb einer VerzStruktur finden und löschen
Hallo zusammen,
ich habe die Aufgabe, eine gegebene Ordnerstruktur, die mit zigtausend Dateien gefüllt ist, nach Dateien mit bestimmten Attributen zu durchsuchen.
Die gefundenen Dateien sollen gelöscht werden.
Hintergrund:
Es handelt sich um die Dateien eines gealterten Fileservers (Win 2003 Std SP2). Dort kam vor Jahren mal ein Dateiarchivierungssystem zum Einsatz. Diese hat Dateien mit einem bestimmten Alter auf eine andere Plattform verschoben und in den entspr. Verzeichnissen einen Link dorthin hinterlassen.
Dieses Archivierungssystem gibt es nun nicht mehr und nun befinden sich knapp 10.000 Links in den Ordnern, die ins Leere verweisen.
Da die Daten des Fileservers in eine neue Ordnerstruktur und auf einen anderen Server migriert werden sollen, müssen diese toten Links zuvor enfernt werden, da es sonst Probleme mit der Dateiübernahme gibt.
Ich haben nun eine Text-Datei, die ich durch --- dir *.* /s /al > deadfiles.txt --- erzeugt habe.
Der Inhalt sind bekanntermaßen in etwa so aus:
---
Verzeichnis von H:\Daten\Abschluesse\Firma1\2004\Q4
09.02.2004 22:30 (8.945.664) Bestandsabwertung 040209_2.xls
23.02.2005 14:27 (2.606.592) Bestandsbewertung XX23104.xls
26.01.2005 12:48 (2.186.240) Debitorenstatistik FDSA.xls
11.11.2004 13:07 (1.253.376) Hš GD 30.09.2004-Verbesserung.xls
14.02.2006 16:44 (1.193.472) Hš GP 31.12.2004-Verbesserung.xls
04.10.2005 10:08 (15.498.766) Unterlagen Steuererkl„rung 2004.zip
02.02.2005 12:09 (17.677.312) Wareneing„nge FirmaXYZ.xls
7 Datei(en), 49.361.422 Bytes
---
Nun möchte ich diese Textdatei nutzen, um die darin befindlichen Dateien zu löschen.
Ich glaube aber fast, dass ich ohne viel Aufwand damit gar nichts anfangen kann. Ich müsste vor jeden Dateinamen den Pfad hinzufügen, um pro Zeile eine vollständige Dateiinfirmation zu erhalten. Zudem müssten die ganzen überflüssigen Informationen weg, die sich noch mit in der Textdatei befinden. Da wäre das manuelle Löschen der Dateien schneller, als diese Datei anzupassen. ;O)
Gibt es evtl. ein Tool, mit dem ich diese Aufgabe lösen kann?
Was könnt ihr mir empfehlen?
Danke vorab.
Hamspirit
ich habe die Aufgabe, eine gegebene Ordnerstruktur, die mit zigtausend Dateien gefüllt ist, nach Dateien mit bestimmten Attributen zu durchsuchen.
Die gefundenen Dateien sollen gelöscht werden.
Hintergrund:
Es handelt sich um die Dateien eines gealterten Fileservers (Win 2003 Std SP2). Dort kam vor Jahren mal ein Dateiarchivierungssystem zum Einsatz. Diese hat Dateien mit einem bestimmten Alter auf eine andere Plattform verschoben und in den entspr. Verzeichnissen einen Link dorthin hinterlassen.
Dieses Archivierungssystem gibt es nun nicht mehr und nun befinden sich knapp 10.000 Links in den Ordnern, die ins Leere verweisen.
Da die Daten des Fileservers in eine neue Ordnerstruktur und auf einen anderen Server migriert werden sollen, müssen diese toten Links zuvor enfernt werden, da es sonst Probleme mit der Dateiübernahme gibt.
Ich haben nun eine Text-Datei, die ich durch --- dir *.* /s /al > deadfiles.txt --- erzeugt habe.
Der Inhalt sind bekanntermaßen in etwa so aus:
---
Verzeichnis von H:\Daten\Abschluesse\Firma1\2004\Q4
09.02.2004 22:30 (8.945.664) Bestandsabwertung 040209_2.xls
23.02.2005 14:27 (2.606.592) Bestandsbewertung XX23104.xls
26.01.2005 12:48 (2.186.240) Debitorenstatistik FDSA.xls
11.11.2004 13:07 (1.253.376) Hš GD 30.09.2004-Verbesserung.xls
14.02.2006 16:44 (1.193.472) Hš GP 31.12.2004-Verbesserung.xls
04.10.2005 10:08 (15.498.766) Unterlagen Steuererkl„rung 2004.zip
02.02.2005 12:09 (17.677.312) Wareneing„nge FirmaXYZ.xls
7 Datei(en), 49.361.422 Bytes
---
Nun möchte ich diese Textdatei nutzen, um die darin befindlichen Dateien zu löschen.
Ich glaube aber fast, dass ich ohne viel Aufwand damit gar nichts anfangen kann. Ich müsste vor jeden Dateinamen den Pfad hinzufügen, um pro Zeile eine vollständige Dateiinfirmation zu erhalten. Zudem müssten die ganzen überflüssigen Informationen weg, die sich noch mit in der Textdatei befinden. Da wäre das manuelle Löschen der Dateien schneller, als diese Datei anzupassen. ;O)
Gibt es evtl. ein Tool, mit dem ich diese Aufgabe lösen kann?
Was könnt ihr mir empfehlen?
Danke vorab.
Hamspirit
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 274691
Url: https://administrator.de/contentid/274691
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
8 Kommentare
Neuester Kommentar
Moin,
könntest du z.B. via Powershell machen:
Löscht alle Softlinks die es in einem Verzeichnis und dessen Unterverzeichnisse findet
Ansonsten kann das fast jeder bessere Dateiexplorer (TotalCommander / DirectoryOpus etc.)
Gruß jodel32
könntest du z.B. via Powershell machen:
Löscht alle Softlinks die es in einem Verzeichnis und dessen Unterverzeichnisse findet
gci "D:\Daten" -recurse -force | ?{$_.Attributes -band [System.IO.FileAttributes]::ReparsePoint} | remove-item -Force
Gruß jodel32
Hallo,
mit einem alternativen Dateimanager zum Beispiel. Der Freecommander bietet z.B. die Suche (Alt-F7) nach Dateien mit bestimmten Attributen an. In der Ergebnisliste der Suche kannst Du dann alle Suchergebnisse markieren und kopieren/ausscheiden/löschen
FC ist ein Klon des Norton Commanders
Gruß
Holger
mit einem alternativen Dateimanager zum Beispiel. Der Freecommander bietet z.B. die Suche (Alt-F7) nach Dateien mit bestimmten Attributen an. In der Ergebnisliste der Suche kannst Du dann alle Suchergebnisse markieren und kopieren/ausscheiden/löschen
FC ist ein Klon des Norton Commanders
Gruß
Holger
Zitat von @hamspirit:
Hey, das wäre ja genau das richtige. Und vor allem ganz ohne Dateiliste. ;)
An welcher Stelle wird denn das hier gesuchte Dateiattribut abgefragt?
in diesem Abschnitt werden die gesetzten Attribute verglichen ob es sich um einen Soft-Link handeltHey, das wäre ja genau das richtige. Und vor allem ganz ohne Dateiliste. ;)
An welcher Stelle wird denn das hier gesuchte Dateiattribut abgefragt?
?{$_.Attributes -band [System.IO.FileAttributes]::ReparsePoint}
In $_.Attributes stehen alle Attribute drin, dann wird mit einem Bit-Vergleich (-band) überprüft ob eine Datei ein bestimmtes Attribut hat.
Bei versteckten nutzt du als Filter
und bei schreibgeschützen:
Natürlich kombiniert mit dem Rest des Codes aus dem ersten Post.
Die Filter kannst du auch kombinieren (mit -and oder -or):
Gruß jodel32
Wie sieht die Zeile aus, wenn es sich um eine versteckte oder schreibgeschützte Datei handelt?
Hast du mal meinen Link gelesen ?? Da stehen die verfügbaren Attribute nach denen du filtern kannst!Bei versteckten nutzt du als Filter
?{$_.Attributes -band [System.IO.FileAttributes]::Hidden}
?{$_.Attributes -band [System.IO.FileAttributes]::Readonly}
Die Filter kannst du auch kombinieren (mit -and oder -or):
?{$_.Attributes -band [System.IO.FileAttributes]::Readonly -and $_.Attributes -band [System.IO.FileAttributes]::Hidden }
Gruß jodel32
Dann bitte noch als gelöst markieren. Danke.