Ordina i file nel terminale come finder

1

Nella riga di comando è possibile avere lo stesso ordinamento per file / cartelle come Finder. Se eseguo find . -type d , ottengo come risultato:

./Folder 1
./Folder 10
./Folder 11
./Folder 2
./Folder 3
...

Ho provato find -s . -type d e ho aggiunto anche alcune opzioni di sort . Nessuna fortuna.

Quello che voglio è questo:

./Folder 1
./Folder 2
./Folder 3
...
./Folder 10
./Folder 11
    
posta doekman 29.12.2016 - 10:52
fonte

2 risposte

2

Se guardi cosa dice find sull'ordinamento:

 -s   Cause find to traverse the file hierarchies in 
lexicographical order, i.e., alphabetical order within each directory.  
Note: 'find -s' and 'find | sort' may give different results.

Questo significa che dobbiamo ridurlo a sort in modo da poterlo manipolare un po 'di più.

Come hai già visto, un ordinamento alfanumerico semplice non funzionerà perché sta confrontando tutto come un carattere ANSI e non come numeri. Quello che dobbiamo fare è confrontare i numeri. Possiamo farlo con l'opzione -k di sort

find . -type d | sort -k2.3

Ciò che sta facendo il comando sort -k2.3 è l'ordinamento sul secondo campo (delimitato dallo spazio) che termina in terza posizione. Questo è il risultato usando la convenzione di denominazione della cartella 1 :

.
./Folder 1
./Folder 2
./Folder 3
./Folder 4
./Folder 5
./Folder 6
./Folder 7
./Folder 8
./Folder 9
./Folder 10
./Folder 11
./Folder 12
./Folder 13
./Folder 14
./Folder 15

1 Per creare questa struttura di cartelle, ho usato il comando nella mia cartella home:

mkdir test; cd test; for n in {1..15}; do mkdir "Folder $n"; done
    
risposta data 29.12.2016 - 23:04
fonte
0

Può anche fare

ls -v

che ordina i file in base ai numeri di versione nei nomi per ordine naturale.

Da man ls

-v     natural sort of (version) numbers within text
    
risposta data 29.12.2016 - 20:52
fonte

Leggi altre domande sui tag