2017-10-30 7 views
3

Ich habe eine Reihe von Dateien in einem Ordner mit einer gemeinsamen Namensstruktur, die etwa wie folgt aussieht:Sub-Sortierung ohne ursprüngliche Sortierreihenfolge zu verlieren?

FOOBAR_1A.8_Alice.pdf 
FOOBAR_1A.9_Bob.pdf 
FOOBAR_1B.10_Foo.pdf 
FOOBAR_1B.11_Bar.pdf 
FOOBAR_1B.12_Jack.pdf 
FOOBAR_1B.1_Jill.pdf 
FOOBAR_1B.2_John.pdf 
FOOBAR_1B.3_Mary.pdf 

die obige Reihenfolge, um zu erreichen, ich habe eine erste Art Iteration, die wie folgt aussieht:

find . -type f -name "*.pdf" -print | cut -d'/' -f2 | sort

Aber wie Sie sehen können, 10/11/12 vor 1/2/3 gedruckt.

habe ich versucht, Rohrleitungen zurück in Art wieder:

find . -type f -name "*.pdf" -print | cut -d'/' -f2 | sort | sort -t '.' -k 2n

Aber dies bis vermasselt die vorherige Sortierung Bemühungen und Drucke Ausgabe, die wie folgt aussieht: Also,

FOOBAR_1A.7_Alice.pdf 
FOOBAR_1B.7_Bob.pdf 
FOOBAR_2A.7_John.pdf 
FOOBAR_2B.7_Mary.pdf 
FOOBAR_2C.7_Foo.pdf 
FOOBAR_1A.8_Bar.pdf 
FOOBAR_1B.8_Jack.pdf 
FOOBAR_2A.8_Jill.pdf 

zu fasse zusammen, meine gewünschte Sortierausgabe ist:

  1. FOOBAR_NA.N sollte numerisch für das erste Zeichen (d. H. FOOBAR_1 dann FOOBAR_2 etc.)
  2. FOOBAR_NA.N sollte dann durch das zweite Zeichen alphabetisch sortiert werden (dh FOOBAR_1A dann FOOBAR_1B etc.)
  3. FOOBAR_NA.N sollte schließlich durch die Zahl nach dem ersten Punkt (dh FOOBAR_1A.1 dann FOOBAR_1A.2 etc.) sortiert werden,

Antwort

3

können Sie versuchen, -V (sortiert nach Version):

find . -name '*.pdf' | cut -d'/' -f2 | sort -t _ -k2V 

FOOBAR_1A.8_Alice.pdf 
FOOBAR_1A.9_Bob.pdf 
FOOBAR_1B.1_Jill.pdf 
FOOBAR_1B.2_John.pdf 
FOOBAR_1B.3_Mary.pdf 
FOOBAR_1B.10_Foo.pdf 
FOOBAR_1B.11_Bar.pdf 
FOOBAR_1B.12_Jack.pdf 
1

Es ist auch ok mit dir oder ls

dir -1v *.pdf 

oder

ls -1v *.pdf 
+0

Nice! Gute Idee und nett und kurz! Aber nimmt GNU dir/ls mit '-v natürliche Art von (Versions-) Zahlen im Text an. BSD ist '-v erzwingt das unbearbeitete Drucken von nicht-grafischen Zeichen; Dies ist die Standardeinstellung, wenn die Ausgabe nicht an einem Terminal erfolgt. Die längere Version ist also "tragbarer". Ich gebe dir trotzdem +1! :) –

Verwandte Themen