2012-11-13 11 views
5

ho bisogno di ordinare i file .flv numericamente e sono stato in grado di farlo con il seguente comando:file in ordine numerico in bash

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

ma con molti file (centinaia) non è l'ordinamento in modo corretto.

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 

ma lo strano è questo, se sto rovinando il comando senza "*.flv" che sta funzionando. Potrei usare solo ls ma ho altri tipi di file nella cartella.

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 

quello che ho provato finora:

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

qual è il problema? 'e696.flv' è nel posto giusto, giusto? – dogbane

+0

hai provato a eseguire semplicemente "ls * .flv | sort -f | tail -n 20 " – m1k3y3

+0

@ m1k3y3 non funzionerebbe con il cambiamento del numero di cifre nel nome file –

risposta

11

vorrei provare seguente codice. Funziona su mio scenario di test: file

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

I ls liste flv 1 su ogni linea, sort prende prima parola (e solo uno) in ogni riga a partire dal secondo carattere (all'inizio del numero). Le specie numericamente

5

per ordinare numericamente dopo il primo carattere, provate questo:

sort -k1.2n 
2

dato una cartella con i file in sequenza named 1.flv a 9999.flv

ls -v1 *.flv 

uscita volontà:

1.flv 
2.flv 
... 
10.flv 
... 
90.flv 
... 
100.flv 
101.flv 
... 
9999.flv