Dlaczego wyniki wyszukiwania są sortowane w Cygwin, ale nie w Solarisie?

2

Zastanawiam się, dlaczego findnie zachowuje się tak samo w Solarisie, jak w Cygwin lub Linux.

Mam kilka katalogów z nazwanymi plikami CS##########. Każda #jest cyfrą, ale po CS zawsze jest 10 cyfr.

Podczas korzystania findw Cygwin lista jest wyświetlana w kolejności: CS000000001do CS00002345. Podczas korzystania findz systemu Solaris lista jest całkowicie nieuporządkowana.

Zastanawiam się, czy to jest rzeczywiście związane z systemem operacyjnym, czy może wynika z implementacji find.

BitsOfNix
źródło

Odpowiedzi:

3

findnie sortuje danych wyjściowych. Kolejność nazw plików zależy od kolejności, w jakiej wpisy katalogu pojawiają się w systemie plików. Nie możesz tego kontrolować ani w systemie Solaris, ani w systemie Windows.

W niektórych systemach plików, jeśli utworzysz katalog i dodasz do niego pliki, pliki pojawią się w kolejności, w jakiej zostały dodane. Prawdopodobnie dlatego są sortowane pod Windows. Ale nie wszędzie tak jest (nie sądzę, że tak jest na przykład w przypadku ZFS Solaris), a jeśli zaczniesz usuwać pliki z katalogu i dodawać inne, kolejność jest nieprzewidywalna w przypadku większości systemów plików.

Kilka systemów plików ma przewidywalność, ale większość nie. Mac OS / OSX HFS + i Linux Reiserfs sortują nazwy plików w bajtowej kolejności leksykograficznej (zwróć uwagę, że ustawienia regionalne procesu mogą mieć inną kolejność). Linux ext2 / ext3 / ext4 nie sortuje. To nie jest coś, na co możesz liczyć.

Jeśli potrzebujesz posortowanego wyjścia find, podłącz go do sort.

Gilles
źródło
Jeśli to zrobię >2, to >1i uruchom znaleźć na Debianie z findutils GNU, mam 1, a potem 2. Am I czegoś brakuje? (Nigdy nie widziałem tutaj powrotu nieposortowanych wyników)
Teresa e Junior
Właśnie wypróbowałem te same polecenia na Haiku, a 2 pojawia się przed 1, ale nigdy na Debianie ... Haiku: GNU znajdź 4.2.33, Debian: GNU znajdź 4.4.2
Teresa e Junior
1
@TeresaeJunior Rzeczywiście mkdir a; touch a/1; touch a/2; find ai mkdir a; touch a/2; touch a/1; find awydaje się rzetelnie lista a/1wcześniej a/2. Nie wiem dlaczego. Ale teraz spróbuj rm 1; touch 3lub mv 1 3.
Gilles
Teraz to działa :) Tak naprawdę mam kilka skryptów powłoki, które opierają się na funkcji „sortowania” find. Czas na ich zmianę ...
Teresa e Junior
wielkie dzięki, wierzyłem, że chodziło o OS na żywo, o którym wspomniałeś. Myślę, że nadszedł czas, aby zmienić skrypt, aby zapewnić „%” w stanie uruchomionym.
BitsOfNix