Groups | Search | Server Info | Login | Register
Groups > de.comp.os.unix.shell > #14616
| From | ram@zedat.fu-berlin.de (Stefan Ram) |
|---|---|
| Newsgroups | de.comp.os.unix.shell |
| Subject | Re: Gruppierung mit uniq für NUL-getrennte Daten? |
| Date | 2025-10-14 11:36 +0000 |
| Organization | Stefan Ram |
| Message-ID | <awk-20251014122929@ram.dialup.fu-berlin.de> (permalink) |
| References | <87h5w4nr3u.fsf@vagabond.tim-landscheidt.de> <83ecr7et3g.fsf@helmutwaitzmann.news.arcor.de> <87a51vo3rm.fsf@vagabond.tim-landscheidt.de> <10ckq02$tk9$1@akk3-dmz.akk.uni-karlsruhe.de> |
Urs =?UTF-8?Q?Jan=C3=9Fen?= <urs@niko.tin.org> schrieb oder zitierte:
>sollte man mit awk erschlagen koennen a la
Hatte ich ja auch schon geschrieben.
Allerdings sieht man hier, daß die ganzen Programme in textbasierten
Sprachen (wie bash und den meisten UNIX-tools), Datenstrukturen mit
Ad-hoc-Trennzeichen darstellen müssen, was dann zu Problemen führen
kann. Das ist eigentlich ein Anzeichen dafür, daß man eine Sprache
verwenden sollte, die solche Datenstrukturen richtig repräsentiert.
Tim hatte ja geschrieben, daß er "find" und "uniq" verwenden will.
Trotzdem hier mal ein Beispiel in Python, das auch berücksichtigt,
daß i-Kennzahlen über verschiedene Geräte hinweg nicht eindeutig
sein müssen. Dieser Code wurde nicht getestet, und soll nur die
Idee vermitteln - vor einen Einsatz müßte er noch überprüft werden.
from pathlib import Path # Bibliothek für Dateipfade
def liste_dateien_ohne_dupes(d):
"""
Durchsucht rekursiv das Verzeichnis 'd' und gibt eine Liste aller darin
enthaltenen Dateien zurück, wobei durch Hardlinks verdoppelte Einträge vermieden werden.
Dateien werden an Hand ihrer i- und Geräte-Kennzahl identifiziert, um auch über verschiedene
Dateisysteme hinweg Duplikate erkennen und ausschließen zu können.
Parameter:
d (str or Path): Der Pfad zum Startverzeichnis, das durchsucht werden soll.
Rückgabe:
list[Path]: Eine Liste von Path-Objekten, die Dateien im Verzeichnisbaum repräsentieren.
"""
# Menge zur Speicherung bereits besuchter Dateien anhand ihrer eindeutigen Kennung
# Jede Datei wird durch ein Tupel aus i- und Geräte-Kennzahl eindeutig identifiziert
gesehen = set()
dateien = [] # Liste, in der die gefundenen Dateien ohne Duplikate gesammelt werden
wurzel = Path(d) # Erstelle ein Path-Objekt für den Startordner
# 'rglob' durchsucht den Ordner 'wurzel' rekursiv nach allen Dateien und Unterordnern
for dateipfad in wurzel.rglob('*'):
# Prüfe, ob das gefundene Objekt eine Datei (keinen Ordner) darstellt
if dateipfad.is_file():
# Hole Informationen über die Datei, speziell ihre Inode und das Gerät
stat_info = dateipfad.stat()
# 'st_ino' ist die Inode-Nummer - eine eindeutige Kennung innerhalb eines Dateisystems
# 'st_dev' ist die Geräte-ID, die angibt, auf welchem Dateisystem die Datei liegt
inode_id = (stat_info.st_ino, stat_info.st_dev)
# Vermeide Duplikate durch Prüfung, ob diese Datei (mit gleicher i- und Geräte-Kennung)
# bereits in der Menge 'gesehen' vorhanden ist
if inode_id not in gesehen:
gesehen.add(inode_id) # Merke die Datei als besucht
dateien.append(dateipfad) # Füge die Datei der Ergebnisliste hinzu
return dateien # Rückgabe aller gefundenen Dateien ohne Duplikate
# Beispiel wie man die Funktion benutzt:
# files = liste_dateien_ohne_dupes('Verzeichnispfad')
# print(files)
Back to de.comp.os.unix.shell | Previous | Next — Previous in thread | Next in thread | Find similar
Gruppierung mit uniq für NUL-getrennte Daten? Tim Landscheidt <tim@tim-landscheidt.de> - 2025-10-12 14:15 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? ram@zedat.fu-berlin.de (Stefan Ram) - 2025-10-12 15:10 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? Helmut Waitzmann <nn.throttle@xoxy.net> - 2025-10-12 22:57 +0200
Re: Gruppierung mit uniq für NUL-getrennte Daten? Tim Landscheidt <tim@tim-landscheidt.de> - 2025-10-13 03:54 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? Helmut Waitzmann <nn.throttle@xoxy.net> - 2025-10-13 20:53 +0200
Re: Gruppierung mit uniq für NUL-getrennte Daten? Helmut Waitzmann <nn.throttle@xoxy.net> - 2025-10-14 01:44 +0200
Re: Gruppierung mit uniq für NUL-getrennte Daten? Christian Weisgerber <naddy@mips.inka.de> - 2025-10-14 14:00 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? Urs Janßen <urs@niko.tin.org> - 2025-10-14 06:18 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? ram@zedat.fu-berlin.de (Stefan Ram) - 2025-10-14 11:36 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? Urs Janßen <urs@niko.tin.org> - 2025-10-14 11:58 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? ram@zedat.fu-berlin.de (Stefan Ram) - 2025-10-14 15:46 +0000
Re: Gruppierung mit uniq für NUL-getrennte Daten? Stefan Reuther <stefan.news@arcor.de> - 2025-10-13 16:58 +0200
Re: Gruppierung mit uniq für NUL-getrennte Daten? Thomas Dorner <dcous251013.dorner@spamgourmet.com> - 2025-10-13 18:36 +0200
csiph-web