Forum: PC-Programmierung numeric sort recursive filelist


von Drago S. (mratix)


Lesenswert?

Bin gerade am gröbeln mit einem input | sort > output im bash-script.

Als input fließen über den stdin von
1
find . -iname '*.txt' | xargs -L 1 echo | awk '{print $0}' >> files.txt
 einige Dateinamen ein.

Relevant ist nur das letzte Zeichen des Dateinamens. Das ist numerisch 
und danach soll sortiert werden z.B.
1
| sort -dn -o files.txt

Ein möglicher input mit gewünschter Sortierung wäre z.B.
1
./1.txt
2
./nachrichten2.txt
3
week/gestern/frisch_gezüchtet3.txt
4
old/eskimo99_witze_4.txt
5
./nix_neues_6.txt
6
tief/vergraben/22/eiersuche_7.txt
7
archive/4cm_schnee_im_januar9.txt

Weder `sort` noch `cut` haben einen Parameter, um das letzte Zeichen 
(reverse) oder meinetwegen die letzten 5 Zeichen 
(lastchar+dot+extension) abzufangen.

Hat jemand eine Idee wie ich ansetzen könnte?

: Bearbeitet durch User
von Yalu X. (yalu) (Moderator)


Lesenswert?

Wenn alle Dateinamen die gleiche Extension haben:

1
rev files.txt | sort | rev

Wenn die Extensions verschieden sein können, aber jeder Dateiname
irgendeine Extension hat:

1
rev files.txt | sort -t. -k2 | rev

: Bearbeitet durch Moderator
von Drago S. (mratix)


Lesenswert?

1
$ find . -iname '*.txt' | xargs -L 1 echo | awk '{print $0}' >> files_unsorted
2
$ cat files_unsorted 
3
./8.txt
4
./dir1/2.txt
5
./dir1/5.txt
6
./dir1/9.txt
7
./dir2/4.txt
8
./dir2/dir2a/3.txt
9
./1.txt
10
$ rev files_unsorted | sort | rev
11
./1.txt
12
./dir1/2.txt
13
./dir2/dir2a/3.txt
14
./dir2/4.txt
15
./dir1/5.txt
16
./8.txt
17
./dir1/9.txt

Bravo! Alles schön nach numeric sortiert, Pfade beibehalten ohne 
aufwendig zu vergewaltigen :)

Ich Danke dir Yalu.

von Drago S. (mratix)


Lesenswert?

Yalu X. schrieb:
> sort -t. -k2
Das ist genial, muss ich mir merken. In Kombination mit `rev` kann man 
dann schön reverse ansetzen.

-t, --field-separator=SEP  SEP benutzen statt Übergang von Nichtleerraum 
zu Leerraum
Klingt stark na Delimiter, in diesem Fall ist es der Punkt vor der 
extension.

Super!

: Bearbeitet durch User
von 🐧 DPA 🐧 (Gast)


Lesenswert?

Bzg. `rev`: test10 > test01, 01tset < 10tset ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.