Es geht um folgendes Konstrukt: find /f1/f2/f3/2006* -maxdepth 1 -user `whoami` -type d | \ cut -f1-5 -d"/" | sort -u | while read -r FOLDER; do Trotz "sort -u" werden die Ordner nicht alfabet. sortiert abgearbeitet, sondern vermutlich in der Reihenfolge wie sie auf die Platte geschrieben wurden. Die Ordner enthalten keine Leerzeichen oder Sonderzeichen. Genau kann ich die Sortierung nicht testen, meistens stimmt so ja, aber manchmal sehe ich, dass ein Ordner von der alfabet. Sortierung früher abgearbeitet wird. Wie muss man die Syntax ändern, damit die Sortierung passt? -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo, Am Thu, 13 Mar 2014, ?l ??gn?r schrieb:
Es geht um folgendes Konstrukt:
find /f1/f2/f3/2006* -maxdepth 1 -user `whoami` -type d | \ cut -f1-5 -d"/" | sort -u | while read -r FOLDER; do
Trotz "sort -u" werden die Ordner nicht alfabet. sortiert abgearbeitet, sondern vermutlich in der Reihenfolge wie sie auf die Platte geschrieben wurden. Die Ordner enthalten keine Leerzeichen oder Sonderzeichen.
Also hier klappt das. $ ls -U /usr/src/linux arch fs firmware security kernel net Kbuild README README.SUSE include COPYING mm lib scripts virt CREDITS block sound samples crypto Makefile usr Documentation init tools drivers ipc REPORTING-BUGS Kconfig MAINTAINERS $ find /usr/src/linux/* -maxdepth 1 -type d | cut -d/ -f1-5 | \ sort -u | while read -r d; do echo "$d"; done /usr/src/linux/Documentation /usr/src/linux/arch /usr/src/linux/block [..] HTH, -dnh -- ich kenne sogar einige [Steine], die mir freiwillig das Dach über dem Kopf halten. Außerdem sind sie pflegeleicht, widersprechen nicht und machen nur selten etwas kaputt. Manchmal habe ich aber auch das Gefühl, daß sie nur so tun, als ob sie mir zuhören ... -- Bodo Eggert -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Do, 13 Mär 2014 22:52:33 CET schrieb David Haller:
Hallo,
Am Thu, 13 Mar 2014, ?l ??gn?r schrieb:
Es geht um folgendes Konstrukt:
find /f1/f2/f3/2006* -maxdepth 1 -user `whoami` -type d | \ cut -f1-5 -d"/" | sort -u | while read -r FOLDER; do
Trotz "sort -u" werden die Ordner nicht alfabet. sortiert abgearbeitet, sondern vermutlich in der Reihenfolge wie sie auf die Platte geschrieben wurden. Die Ordner enthalten keine Leerzeichen oder Sonderzeichen.
Also hier klappt das.
$ ls -U /usr/src/linux arch fs firmware security kernel net Kbuild README README.SUSE include COPYING mm lib scripts virt CREDITS block sound samples crypto Makefile usr Documentation init tools drivers ipc REPORTING-BUGS Kconfig MAINTAINERS
$ find /usr/src/linux/* -maxdepth 1 -type d | cut -d/ -f1-5 | \ sort -u | while read -r d; do echo "$d"; done /usr/src/linux/Documentation /usr/src/linux/arch /usr/src/linux/block [..]
David, das ist leider das Problem, dass man das so einfach nicht prüfen kann, es _kann_ ja passen. Wie geschrieben, ich glaube es hängt vom tatsächlichen Platz auf der HD ab und meistens entspricht das auch der Sortierung. Wenn ich tausende Ordner abarbeiten lasse, dann sehe ich manchmal, dass die Sortierung nicht passt und nachdem das 4stellige Jahreszahlen sind, ist das auch leicht erkennbar. Das ist nicht immer ein Problem, aber wenn da eine steigende Nummerierung dabei ist, die im neuen Namen enthalten ist, dann stimmt die Sortierung danach manchmal nicht. Hast du einen ähnlichen Befehl auf Lager? Notfalls kann ich ls nehmen, aber das hat dann andere Probleme. for INP in `ls "*.bla" 2>/dev/null`; do -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Аl Воgnеr schrieb:
...aber wenn da eine steigende Nummerierung dabei ist, die im neuen Namen enthalten ist, dann stimmt die Sortierung danach manchmal nicht.
Wie sieht die Steigende Nummerierung aus? Gesucht wird nach 2006* Wenn zum Beispiel gefunden wird: 2006-1 2006-2 2006-3 2006-4 2006-5 2006-6 2006-7 2006-8 2006-9 2006-10 Nach der Sortierung wird das so aussehen 2006-1 2006-10 2006-2 [..] [..] Viele grüße Volker -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Fr, 14 Mär 2014 21:37:50 CET schrieb Volker Kohaupt: Hallo Volker,
...aber wenn da eine steigende Nummerierung dabei ist, die im neuen Namen enthalten ist, dann stimmt die Sortierung danach manchmal nicht.
Wie sieht die Steigende Nummerierung aus?
Gesucht wird nach 2006* Wenn zum Beispiel gefunden wird: 2006-1 2006-2 2006-3 2006-4 2006-5 2006-6 2006-7 2006-8 2006-9 2006-10
Nach der Sortierung wird das so aussehen 2006-1 2006-10 2006-2 [..] [..]
Die Stellen sind immer ident, also zB 2006-01 und nicht 2006-1. Zumindest ls sortiert immer richtig. Thunar macht mich verrückt, wenn ich um Stellen zu sparen HEX verwende. 7a 56 57 Da kommt dann 7a vor 56, aber das ist ein anderes Thema. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am 13.03.2014 um 20:28 schrieb Аl Воgnеr <suse-ml@corr.eu.org>:
Genau kann ich die Sortierung nicht testen, meistens stimmt so ja, aber manchmal sehe ich, dass ein Ordner von der alfabet. Sortierung früher abgearbeitet wird.
sort verhält sich je nach LC_* unterschiedlich. Setze doch mal LC_ALL=C - bleibt das Problem? Rainer
Hallo, Am Sat, 15 Mar 2014, Rainer Sokoll schrieb:
Am 13.03.2014 um 20:28 schrieb ?l ??gn?r <suse-ml@corr.eu.org>:
Genau kann ich die Sortierung nicht testen, meistens stimmt so ja, aber manchmal sehe ich, dass ein Ordner von der alfabet. Sortierung früher abgearbeitet wird.
sort verhält sich je nach LC_* unterschiedlich. Setze doch mal LC_ALL=C - bleibt das Problem?
Besser: LC_COLLATE=POSIX Und Al, ich kapiere nicht so recht was du eigentlich willst, also welche Verzeichnisse welcher Stufe. Irgendwas unter: /d1/d2/d3/foo* ok, soweit. Aber dann? Willst du nur (sortiert) die Namen der Unterverzeichnisse, auf die foo* passt oder was? Beschreib mal, was du machen willst. Nicht wie. Je nachdem ist das dann nämlich eigentlich trivial[1]. Nur hast du glaub ein bissl das sprichwörtliche Brett vor'm Kopp und wir kommen nicht drauf was du eigentlich willst, und haben somit gewissermaßen auch nen Brett vor'm Schädel ;) Also sowas wie: - ich will die Verzeichnisse mit ... [unterhalb $PFAD, sortiert nach ...] - und dann will ich darin ... machen ... -dnh [1] z.B. in perl mit opendir/readdir/grep/map o.ä. oder per File::Find, oder schlicht per bash -- ``Hello, my userid is root and if you feed me caffeine, nobody gets hurt.'' -- AdB on ASR -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am Sa, 15 Mär 2014 17:31:40 CET schrieb David Haller: Hallo David,
Am Sat, 15 Mar 2014, Rainer Sokoll schrieb:
Am 13.03.2014 um 20:28 schrieb ?l ??gn?r <suse-ml@corr.eu.org>:
Genau kann ich die Sortierung nicht testen, meistens stimmt so ja, aber manchmal sehe ich, dass ein Ordner von der alfabet. Sortierung früher abgearbeitet wird.
sort verhält sich je nach LC_* unterschiedlich. Setze doch mal LC_ALL=C - bleibt das Problem?
Besser: LC_COLLATE=POSIX
Und Al, ich kapiere nicht so recht was du eigentlich willst,
Ich bilde mir ein, ich las da mal irgendwas zur Problematik mit find und sort, hatte damals aber keine Zeit das im Detail zu verfolgen und dachte, du kannst sofort sagen, dass meine Syntax nicht optimal ist und was anderes besser ist. Wenn dir dazu nichts einfällt, dann werde ich mich wohl abfinden müssen. Es ist ja auch nicht so wichtig.
also welche Verzeichnisse welcher Stufe. Irgendwas unter:
/d1/d2/d3/foo*
ok, soweit. Aber dann? Willst du nur (sortiert) die Namen der Unterverzeichnisse, auf die foo* passt oder was?
Nehmen wir den einfachsten Fall, dass alle Verzeichnisse einer Suche nach Ordner auf gleichem Level gewünscht sind und folgendes gefunden wird: /d1/d2/d3/2009-01 /d1/d2/d3/2010-04 /d1/d2/d3/2012-11 Das wird dann sortiert, siehe Eingangsposting. Wenn ich nun in der Schleife den Ordner mit echo anzeigen lasen und dabei folgendes sehen _könnte_, dann frage ich mich warum /d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d1/d2/d3/2010-04 Bei tausenden bzw. deutlich mehr Ordnern ist die Logik bzw. das Problem nicht so leicht zu lokalisieren. Ich wundere mich eben, wenn ich, um beim Beispiel zu bleiben, 2012 kommt und somit alles aus 2010 erledigt sein sollte, und irgendwann später sehe ich 2010. In der Pipe ist ja sort. Daher nahm ich an, dass aus welchen Gründen auch immer der sort-Befehl nicht wirksam ist und mir darauf jemand grundsätzlich antworten könnte. Eines der Probleme ist, dass ich einfach nicht annehmen kann, dass 2010 abgearbeitet ist, wenn man 2012 sieht. Ansonsten gibt es ja keine Auswirkungen.
Beschreib mal, was du machen willst. Nicht wie.
Ich will Ordner (alle mit gleicher Tiefe) suchen, die dann _sortiert_ abgearbeitet werden sollen, dh der Ordner ist das Argument für das Bash-Script, um ein einfaches Beispiel zu nennen. Das Suchergebnis wäre also, zB /d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d1/d2/d3/2010-04 Das soll dann sortiert werden und das Ergebnis soll dann an ein Script übergeben werden, also script.sh /d1/d2/d3/2009-01 script.sh /d1/d2/d3/2010-04 script.sh /d1/d2/d3/2012-11 Testen kann man das IMHO nicht sehr einfach, weil es ziemlich sicher mit dem kleinen Beispiel passt.
Je nachdem ist das dann nämlich eigentlich trivial[1]. Nur hast du glaub ein bissl das sprichwörtliche Brett vor'm Kopp und wir kommen nicht drauf was du eigentlich willst, und haben somit gewissermaßen auch nen Brett vor'm Schädel ;)
Ich glaube, ihr könnt es nicht nachvollziehen, weil das Problem erst in der großen Masse auftritt. Vielleicht ist es ein Bug, der nicht auffällt, weil er schwer zu reproduzieren ist und oft ja auch egal ist. Vielleicht ist einfach das Suchergebnis zu groß und es wird deswegen nicht korrekt sortiert.
Also sowas wie:
- ich will die Verzeichnisse mit ... [unterhalb $PFAD, sortiert nach ...] - und dann will ich darin ... machen ...
-dnh
[1] z.B. in perl mit opendir/readdir/grep/map o.ä. oder per File::Find, oder schlicht per bash
Ich denke, das sollte man auch mit der Bash hinbekommen. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Hallo Al, On Sat, 15 Mar 2014, Аl Воgnеr wrote:
Am Sa, 15 Mär 2014 17:31:40 CET schrieb David Haller: /d1/d2/d3/2009-01 /d1/d2/d3/2010-04 /d1/d2/d3/2012-11
Das wird dann sortiert, siehe Eingangsposting.
Wenn ich nun in der Schleife den Ordner mit echo anzeigen lasen und dabei folgendes sehen _könnte_, dann frage ich mich warum
/d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d1/d2/d3/2010-04
Bei tausenden bzw. deutlich mehr Ordnern ist die Logik bzw. das Problem nicht so leicht zu lokalisieren.
Und du bist sicher, dass es wie oben aussieht, und nicht u.U. so? /d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d2/d2/d3/2010-04 Zum debuggen würde sich dann denke ich ein "tee" im Script eignen, mit dem die Ausgabe für eine spätere Verifikation gesichert wird. Greetings Daniel -- Ich bin dafür das wir dagegen sind! -- unknown -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Am So, 16 Mär 2014 14:17:21 CET schrieb Daniel Lord: Hallo Daniel,
On Sat, 15 Mar 2014, Аl Воgnеr wrote:
Am Sa, 15 Mär 2014 17:31:40 CET schrieb David Haller: /d1/d2/d3/2009-01 /d1/d2/d3/2010-04 /d1/d2/d3/2012-11
Das wird dann sortiert, siehe Eingangsposting.
Wenn ich nun in der Schleife den Ordner mit echo anzeigen lasen und dabei folgendes sehen _könnte_, dann frage ich mich warum
/d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d1/d2/d3/2010-04
Bei tausenden bzw. deutlich mehr Ordnern ist die Logik bzw. das Problem nicht so leicht zu lokalisieren.
Und du bist sicher, dass es wie oben aussieht, und nicht u.U. so?
/d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d2/d2/d3/2010-04
Ja, ganz sicher. /d1 ist ja der Mountpoint d2 ist die Art, zB originalfotos d3 ist zB der User es gibt auch nur Kleinbuchstaben Ich stelle das aber nicht nur bei Fotos fest, sondern auch bei anderen Dateien, die in Massen abgearbeitet werden, zB Videofiles. Die Benennung der Dateien erfolgt per Script und hat eine Logik, zB Datum an Hand der Metadaten, dh manuelle Eingabefehler sind ausgeschlossen. -- Αl -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hallo Al, zwar habe ich keine Lösung, aber ... Ich habe im Verzeichnis zvol/14Ele/unfold viele Unterverzeichnisse der Form yyyy/mm/dd und darin Dateien mit den Namen yyyymmddHHMMSS*.vol, also z.B. zvol/14Ele/unfold/2013/05/09/2013050905502200dBZ.vol Zum Test habe ich damit Folgendes getan: 1. find zvol/14Ele/unfold/* -maxdepth 3 | sort > ~/dirs 2. sort ~/dirs > dirs.sort 3. find zvol/14Ele/unfold/* -maxdepth 3 > ~/dirs.unsort Und anschließend habe ich mit find dirs und dirs.sort und dirs.unsort verglichen. Ergebnis: dirs ist mit dirs.sort identisch, d.h. das Sortieren hat funktioniert. dirs.sort und dirs.unsort sind _nicht_ identisch, d.h. find ohne ein sort macht nicht die richtige Reihenfolge. LC_ALL und LC_COLLATE sind überhaupt nicht gesetzt bei mir, LANG ist de_DE.UTF-8. Ich verwende OS12.3 64bit. Vielleicht hilft Dir das ja irgendwie weiter... Gruß Jan Am 15.03.2014 22:21, schrieb Аl Воgnеr:
Am Sa, 15 Mär 2014 17:31:40 CET schrieb David Haller:
Hallo David,
Am Sat, 15 Mar 2014, Rainer Sokoll schrieb:
Am 13.03.2014 um 20:28 schrieb ?l ??gn?r <suse-ml@corr.eu.org>:
Genau kann ich die Sortierung nicht testen, meistens stimmt so ja, aber manchmal sehe ich, dass ein Ordner von der alfabet. Sortierung früher abgearbeitet wird.
sort verhält sich je nach LC_* unterschiedlich. Setze doch mal LC_ALL=C - bleibt das Problem?
Besser: LC_COLLATE=POSIX
Und Al, ich kapiere nicht so recht was du eigentlich willst,
Ich bilde mir ein, ich las da mal irgendwas zur Problematik mit find und sort, hatte damals aber keine Zeit das im Detail zu verfolgen und dachte, du kannst sofort sagen, dass meine Syntax nicht optimal ist und was anderes besser ist. Wenn dir dazu nichts einfällt, dann werde ich mich wohl abfinden müssen. Es ist ja auch nicht so wichtig.
also welche Verzeichnisse welcher Stufe. Irgendwas unter:
/d1/d2/d3/foo*
ok, soweit. Aber dann? Willst du nur (sortiert) die Namen der Unterverzeichnisse, auf die foo* passt oder was?
Nehmen wir den einfachsten Fall, dass alle Verzeichnisse einer Suche nach Ordner auf gleichem Level gewünscht sind und folgendes gefunden wird:
/d1/d2/d3/2009-01 /d1/d2/d3/2010-04 /d1/d2/d3/2012-11
Das wird dann sortiert, siehe Eingangsposting.
Wenn ich nun in der Schleife den Ordner mit echo anzeigen lasen und dabei folgendes sehen _könnte_, dann frage ich mich warum
/d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d1/d2/d3/2010-04
Bei tausenden bzw. deutlich mehr Ordnern ist die Logik bzw. das Problem nicht so leicht zu lokalisieren.
Ich wundere mich eben, wenn ich, um beim Beispiel zu bleiben, 2012 kommt und somit alles aus 2010 erledigt sein sollte, und irgendwann später sehe ich 2010. In der Pipe ist ja sort.
Daher nahm ich an, dass aus welchen Gründen auch immer der sort-Befehl nicht wirksam ist und mir darauf jemand grundsätzlich antworten könnte. Eines der Probleme ist, dass ich einfach nicht annehmen kann, dass 2010 abgearbeitet ist, wenn man 2012 sieht. Ansonsten gibt es ja keine Auswirkungen.
Beschreib mal, was du machen willst. Nicht wie.
Ich will Ordner (alle mit gleicher Tiefe) suchen, die dann _sortiert_ abgearbeitet werden sollen, dh der Ordner ist das Argument für das Bash-Script, um ein einfaches Beispiel zu nennen.
Das Suchergebnis wäre also, zB
/d1/d2/d3/2009-01 /d1/d2/d3/2012-11 /d1/d2/d3/2010-04
Das soll dann sortiert werden und das Ergebnis soll dann an ein Script übergeben werden, also
script.sh /d1/d2/d3/2009-01 script.sh /d1/d2/d3/2010-04 script.sh /d1/d2/d3/2012-11
Testen kann man das IMHO nicht sehr einfach, weil es ziemlich sicher mit dem kleinen Beispiel passt.
Je nachdem ist das dann nämlich eigentlich trivial[1]. Nur hast du glaub ein bissl das sprichwörtliche Brett vor'm Kopp und wir kommen nicht drauf was du eigentlich willst, und haben somit gewissermaßen auch nen Brett vor'm Schädel ;)
Ich glaube, ihr könnt es nicht nachvollziehen, weil das Problem erst in der großen Masse auftritt. Vielleicht ist es ein Bug, der nicht auffällt, weil er schwer zu reproduzieren ist und oft ja auch egal ist. Vielleicht ist einfach das Suchergebnis zu groß und es wird deswegen nicht korrekt sortiert.
Also sowas wie:
- ich will die Verzeichnisse mit ... [unterhalb $PFAD, sortiert nach ...] - und dann will ich darin ... machen ...
-dnh
[1] z.B. in perl mit opendir/readdir/grep/map o.ä. oder per File::Find, oder schlicht per bash
Ich denke, das sollte man auch mit der Bash hinbekommen.
- -- _________________________________________________________________ Jan Handwerker http://www.imk-tro.kit.edu/jan.handwerker.php Recursion (f) --> Recursion Mit LaTeX wär das nicht passiert. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.19 (GNU/Linux) Comment: Digitale Unterschrift mit GnuPG Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ iEYEARECAAYFAlMmyNQACgkQ4wryzGTbiqgQgACfZvDmBKV/2GddgZrg3u25w0Fb MxgAnj7E2tOEdFI3oXmxVTMpZEKvQusk =sxBq -----END PGP SIGNATURE----- -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
participants (6)
-
Daniel Lord
-
David Haller
-
Handwerker, Jan (IMK)
-
Rainer Sokoll
-
Volker Kohaupt
-
Аl Воgnеr