Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


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

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

From Helmut Waitzmann <nn.throttle@xoxy.net>
Newsgroups de.comp.os.unix.shell
Subject Re: Gruppierung mit uniq für NUL-getrennte Daten?
Date 2025-10-13 20:53 +0200
Organization A noiseless patient Spider
Message-ID <834is2eiq9.fsf@helmutwaitzmann.news.arcor.de> (permalink)
References <87h5w4nr3u.fsf@vagabond.tim-landscheidt.de> <83ecr7et3g.fsf@helmutwaitzmann.news.arcor.de> <87a51vo3rm.fsf@vagabond.tim-landscheidt.de>

Show all headers | View raw


 Tim Landscheidt <tim@tim-landscheidt.de>:
> Helmut Waitzmann <nn.throttle@xoxy.net> wrote:
>
>> Tim Landscheidt <tim@tim-landscheidt.de>:
>>> ich möchte mit (GNU) find
>
>> (also nehme ich an, dass der GNU‐Werkzeugkoffer zur
>> Verfügung  steht)
>>
>>> eine Liste von Dateien erstellen und abarbeiten, aber
>>> hardverlinkte Dateien nur einmal, sprich: Einmal pro Inode.
>
>>> Die Liste kann ich mit „find -printf '%i\0%p\0'“ erzeugen.
>>> Aber wie bekomme ich mit uniq oder anderen GNU/Linux-Bord-
>>> mitteln eine Gruppierung (in diesem Fall nur den ersten
>>> Treffer) nach Inode hin, wenn ich bei den Dateinamen belie-
>>> bige Zeichen erwarte?
>
>>> Die Pipeline:
>
>>> | find -type f -printf '%8i\t%p\0' | uniq -zw 8 | cut -zc10- | […]
>
>>> funktioniert, ist aber hässlich (und falsch, da Inodes wohl
>>> 64 Bit haben können, und man deshalb mit 20 Ziffern rechnen
>>> muss
>
>> Was empfindest du daran als hässlich?
>
> Ästhetik ist natürlich immer subjektiv, aber diese Lösung
> verlangt, dass ein Inode eine Zahl ist, maximal 64 Bit lang
> ist, etc. Für die Problemstellung ist das eine unnötige De-
> tailtiefe, denn Inodes werden dort nur als amorphe „Dinge“
> benötigt, bei denen es darauf ankommt, ob sie identisch sind
> oder nicht, und sonst nichts.

 Damit hast du natürlich recht.  Wenn man also nur fordern will, 
 dass die Inode‐Kennung nur aus einer Zeichenfolge (mit beliebigen 
 Zeichen ohne das ASCII‐Zeichen NUL) besteht und sonst keiner 
 Einschränkung unterliegt, ist selbst

   find … -printf '%i %p\0'

 nicht sicher genug:  Eine Inode‐Kennung könnte auch Leerzeichen 
 enthalten.

 Dann bleibt nur,

   find … -printf '%i\0%p\0'

 zu verwenden.

 „xargs“ erkennt dann für jedes Inode‐Nummer‐Dateiname‐Paar zwei 
 einzelne statt einen kombinierten Parameter; und weil man „xargs“ 
 nicht anweisen kann, die Parameter, die es erkennt, nur in 
 Portionen mit gerader Anzahl an das Shell zu übergeben, bleibt 
 dann nur die Möglichkeit, dass „xargs“ das Shell mit jeweils 
 genau einem Paar von Parametern aufruft.

 Das macht die Kommandozeile des aufgerufenen Shells einfacher 
 (keine „for“‐Schleife mehr), aber erzeugt halt genau so viele 
 Shell‐Aufrufe, wie “find" Dateien gefunden hat:

   find . -type f -printf '%i\0%p\0' |
   xargs -0 -r -x -L 2 -- sh -c '
     nummer="${1}" name="${2?}" &&
     namen=../nummer/"$nummer" &&
     printf %s\\0 "$name" >> "$namen"
     ' sh

 Und auch hier kann man wieder, wenn man nur am jeweils ersten 
 gefundenen Dateinamen jedes Inodes interessiert ist, statt mit

   printf %s\\0 "$name" >> "$namen"

 alle Namen aufzusammeln, mit

   {
     test -f "$namen" ||
     printf %s "$name" > "$namen"
   }

 nur den jeweils ersten gefundenen Dateinamen jedes Inodes (ohne 
 abschließendes NUL‐Zeichen) notieren.

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