Wydawać by się mogło, że sortowanie plików po nazwie to coś zupełnie naturalnego. Jednak są urządzenia, które czytając pliki z różnych pamięci (karty SD, pendrive) nie potrafią ich sortować, gdyż do tej operacji wymagana jest pamięć RAM. A te urządzenia jej nie posiadają w wystarczającej ilości. Ale jest sposób, aby sobie z tym poradzić - FATSort.
Urządzenia o których piszę to odtwarzacze mp3, transmitery do samochodów czy choćby opisywany wcześniej przeze mnie SD HxC Floppy Emulator. Urządzenia te posiadają tylko tyle pamięci RAM, ile potrzebują do wykonywania czynności zgodnych z przeznaczeniem. Zazwyczaj nie są wielozadaniowe. Służą do wykonywania jednej, konkretnej czynności.
System plików z jakiego korzystają to FAT, czyli najbardziej rozpowszechniony system do przenoszenia danych. Jest prosty, nie posiada uprawnień czy własności plików, które generalnie służą bezpieczeństwu, ale podczas zwykłej domowej pracy są zbędne (jeśli chodzi o pamięci flash)..
Gdy pamięć flash podłączymy do komputera i widzimy posortowane pliki, nie oznacza to wcale, że pliki rzeczywiście leżą na dysku w sposób posortowany. Na dodatek, gdy skasujemy część plików, nowe dane wgrywane są w miejsce wcześniej skasowanych.. Dane mogą być zatem porozrzucane po całej pamięci. Wymienione wcześniej urządzenia odczytują pliki w takiej kolejności jak rzeczywiście znajdują się w pamięci przenośnej.
Z problemem sortowania plików może nam pomóc program FATSort. Aby zainstalować ten program w Ubuntu, wystarczy kliknąć poniższy przycisk:
Jak sortować pliki za pomocą FATSort?
Na początek musimy znaleźć plik urządzenia blokowego danej pamięci/dysku. Możemy to zrobić na kilka sposób:
1. Jeśli nasza pamięć jest zamontowana, możemy to wykonać za pomocą polecenia mount:
$ mount
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
(...)
/dev/sdh1 on /media/TOSHIBA type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
/dev/sda5 on / type ext4 (rw,errors=remount-ro)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
none on /sys/fs/cgroup type tmpfs (rw)
(...)
/dev/sdh1 on /media/TOSHIBA type vfat (rw,nosuid,nodev,uid=1000,gid=1000,shortname=mixed,dmask=0077,utf8=1,showexec,flush,uhelper=udisks)
W powyższym przykładzie pamięć TOSHIBA ma plik urządzenia blokowego /dev/sdh1.
2. Kolejnym poleceniem, które możemy użyć to fdisk
$ sudo fdisk -l
Disk /dev/sda: 320.1 GB, 320072933376 bytes
głowic: 255, sektorów/ścieżkę: 63, cylindrów: 38913, w sumie sektorów: 625142448
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
(...)
Dysk /dev/sdh: 4063 MB, bajtów: 4063232000
głowic: 125, sektorów/ścieżkę: 62, cylindrów: 1024, w sumie sektorów: 7936000
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x000bf9ac
Urządzenie Rozruch Początek Koniec Bloków ID System
/dev/sdh1 * 62 7935999 3967969 c W95 FAT32 (LBA)
Disk /dev/sda: 320.1 GB, 320072933376 bytes
głowic: 255, sektorów/ścieżkę: 63, cylindrów: 38913, w sumie sektorów: 625142448
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
(...)
Dysk /dev/sdh: 4063 MB, bajtów: 4063232000
głowic: 125, sektorów/ścieżkę: 62, cylindrów: 1024, w sumie sektorów: 7936000
Jednostka = sektorów, czyli 1 * 512 = 512 bajtów
Rozmiar sektora (logiczny/fizyczny) w bajtach: 512 / 512
Rozmiar we/wy (minimalny/optymalny) w bajtach: 512 / 512
Identyfikator dysku: 0x000bf9ac
Urządzenie Rozruch Początek Koniec Bloków ID System
/dev/sdh1 * 62 7935999 3967969 c W95 FAT32 (LBA)
Na powyższym przykładzie dysk z systemem plików FAT32 to /dev/sdh1.
Zanim zaczniemy sortowanie plików należy odmontować dysk. Posługując się powyższym przykładem należy zrobić to w poniżej przedstawiony sposób:
$ sudo umount /media/TOSHIBA
Aby wyświetlić dotychczasowy porządek plików w systemie plików FAT:
$ sudo fatsort -l /dev/sdh1
Proste sortowanie możemy wykonać w następujący sposób:
$ sudo fatsort /dev/sdh1
Domyślnie po sortowaniu nazwy plików zaczynające się od dużej litery będą przed plikami zaczynającymi się z małej litery. Aby ignorować wielkość liter podczas sortowania dodajemy opcję -c:
$ sudo fatsort -c /dev/sdh1
Jeżeli nasze pliki zawierają liczby w nazwach (np. pliki mp3) będą sortowane po kolejności znaków, np:
file123.mp3
file21.mp3
file3.mp3
file21.mp3
file3.mp3
Aby posortować w sposób naturalny, uwzględniając wartość tych liczb, należy dodać opcję -n:
$ sudo fatsort -n /dev/sdh1
Wówczas kolejność plików w FAT zmieni się na:
file3.mp3
file21.mp3
file123.mp3
file21.mp3
file123.mp3
Więcej opcji dotyczących sortowania plików w systemie plików FAT możemy znaleźć w systemowym podręczniku:
$ man fatsort