Groups | Search | Server Info | Login | Register


Groups > de.comp.os.unix.shell > #14616

Re: Gruppierung mit uniq für NUL-getrennte Daten?

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>

Show all headers | View raw


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 | NextPrevious in thread | Next in thread | Find similar


Thread

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