2012-11-13 7 views
5

muszę uporządkować pliki .flv numerycznie i udało mi się to zrobić za pomocą następującego polecenia:Sortowanie plików numerycznie w bash

ls *\.flv | sort --version-sort -f 

ale z wielu plików (setek) to nie sortowanie poprawnie.

ls *\.flv | sort --version-sort -f | tail -n 20 
e680.flv 
e681.flv 
e682.flv 
e683.flv 
e684.flv 
e685.flv 
e686.flv 
e687.flv 
e688.flv 
e689.flv 
e690.flv 
e691.flv 
e692.flv 
e693.flv 
e694.flv 
e695.flv 
**e696.flv** 
s572.flv 
s602.flv 
s654.flv 

ale dziwne jest to, czy jestem rujnując polecenia bez "*.flv" to działa. Mogę użyć tylko ls, ale mam inne typy plików w folderze.

ls | sort --version-sort -f | tail -n 20 
e680.flv 
e681.flv 
e682.flv 
e683.flv 
e684.flv 
e685.flv 
e686.flv 
e687.flv 
e688.flv 
e689.flv 
e690.flv 
e691.flv 
e692.flv 
e693.flv 
e694.flv 
e695.flv 
e696.flv 

co próbowałem dotąd:

ls | sort --version-sort -f | grep "flv" 
    ls *.flv | sort --version-sort -f 
    ls *\.flv | sort --version-sort -f 
    ls *.flv | sort -f 
+2

jaki jest problem? 'e696.flv' jest na właściwym miejscu, prawda? – dogbane

+0

czy próbowałeś po prostu wykonać polecenie "ls * .flv | sort -f | tail -n 20 " – m1k3y3

+0

@ m1k3y3 to nie działałoby ze zmianą liczby cyfr w nazwie pliku –

Odpowiedz

11

chciałbym spróbować następujący kod. Działa na moim scenariuszu testowym: Pliki

ls -1 *\.flv | sort -n -k1.2 

W ls listy flv 1 na każdej linii, sort zajmuje pierwsze (i tylko jedno) słowo na każdej linii, począwszy od dnia drugiego znaku (początek numeru). Sortuje numerycznie

5

posortować numerycznie po pierwszym znaku, spróbuj tego:

sort -k1.2n 
2

Biorąc folder z kolejno nazwane pliki z 1.flv do 9999.flv

ls -v1 *.flv 

wyjściem będzie:

1.flv 
2.flv 
... 
10.flv 
... 
90.flv 
... 
100.flv 
101.flv 
... 
9999.flv 
Powiązane problemy