2010-11-20 8 views
16

Comment puis-je commander des fichiers dans un répertoire selon leur véritable ordre numérique?Bash true order order

file1.txt 
file2.txt 
file11.txt 
... 

Je pense qu'il est appelé: Natural Order

+0

Serait-ce une option pour remplir les nombres avec des zéros lors de la création des fichiers? – thejh

+0

Quelle est la connexion bash ici? –

+0

"bash" tend à suggérer que le problème doit être résolu sur une sorte de système d'exploitation Unix et non sur Windows. – icanhasserver

Répondre

19

Utilisez l'option -v:

ls -v file* 
file1 
file2 
file11 
file12 

Une autre option peut utiliser l'sort -V, en supposant que l'on est disponible sur votre plate-forme:

ls file* |sort -V 
+2

Seulement avec GNU 'ls'; Sous MacOS X, l'option 'ls -v' est 'Forcer l'impression sans édition de caractères non graphiques'. –

+0

'$ ls -v' renvoie' test5.txt text1.txt text2.txt text11.txt' pour moi. – thejh

+0

Qu'en est-il de l'utilisation du tri (voir modification ci-dessus)? Celui-ci vient également avec une option de tri naturelle. – icanhasserver

0

Si tous les noms de fichiers sont fileSOMENUMBER.txt, essayez ceci:

ls -1|sed 's:^[^0-9]*\([0-9]*\).*$:\1:g'|sort -n|sed 's:^\(.*\)$:file\1.txt:g' 
5

Pour cette liste particulière de fichiers, trier numériquement à partir du cinquième caractère du premier champ.

$ ls file*|sort -k1.5n 
file1 
file2 
file11 
file12