Mam ponad 100 000 plików w katalogu w moim MacOS X i wygląda na to, że mój skrypt odczytuje w nich plik.
Czy są jakieś ograniczenia lub zalecenia dotyczące posiadania tak wielu plików? Czy powinienem podzielić je na niektóre katalogi?
Ograniczeniem, które znalazłem, było to, że nie mogę mv * foo
dla wszystkich 100 000 plików. Pokazuje błąd, mówiąc „zbyt długi argument”. Działa z około mniej niż 20 000 plików.
macos
mac
filesystems
Daisuki Honey
źródło
źródło
*
lub?
jako argumentu polecenia, system operacyjny przeszukuje cały katalog w poszukiwaniu pasujących plików (powoli), a następnie zastępuje twój argument listą wszystkich pasujących plików (długich), które następnie przekazuje do Komenda. Lepiej radzisz sobie z pętlą lub kilkoma poleceniami mv, npmv a* foo && mv b* foo
.Odpowiedzi:
Zgodnie z odpowiedzią dotyczącą przepełnienia stosu i szczegółowymi szczegółami na stronie Apple , pojedynczy folder może zawierać do 2,1 miliarda elementów.
To powiedziawszy, tylko dlatego, że może pomieścić do 2,1 miliarda przedmiotów, nie oznacza, że może utrzymać wydajność na tym poziomie. Według Wikipedii ; nacisk jest mój:
Tak więc wydajność jest naturalnie obniżona, ponieważ plik katalogu może być używany tylko przez jeden program na raz. A jeśli katalog powiększy się, ryzyko / pogorszenie spowodowane tym problemem będzie tylko rosło; więcej plików oznacza większą szansę dla programów na dostęp do plików w tym jednym katalogu. Dalsze potwierdzenie tego pomysłu tutaj ; znowu nacisk jest mój:
źródło
Krótka odpowiedź: Cóż, jeśli czytasz 100 000 plików, mogę oczekiwać, że skrypt będzie działał wolno.
Długa odpowiedź: Aby dokładniej odpowiedzieć na to pytanie, musisz spojrzeć na system plików na komputerze Mac. Komputery Mac używają HFS + ( Hierarchical File System Plus ), który jest nowoczesnym systemem plików, który ma ograniczenia, ale tylko w ekstremalnych sytuacjach.
Z mojego doświadczenia wynika, że przypomina system plików z księgowaniem Linux EXT. Obsługuje katalogi instalacyjne, uprawnienia typu UNIX itp. Adresował pliki w formacie 32-bitowym, dzięki czemu maksymalna liczba plików, które mogą być przechowywane w woluminie 4 294 967 295, zgodnie z tym źródłem.
System plików zaczyna pękać z plikami większymi niż 8 EB w nowoczesnych systemach oraz do 2,1 miliarda plików i folderów w jednym miejscu, jak opisano tutaj .
Biorąc pod uwagę sposób, w jaki HFS + - lub tak naprawdę dowolny system plików jest skonfigurowany pod tym względem - posiadanie dużej liczby plików w folderze nie powinno robić niczego „dziwnego”.
Szczerze mówiąc, nie sądzę, aby poprawiła się wydajność dystrybucji plików w bardziej złożonej hierarchii folderów. W rzeczywistości ta technika może być mniej wydajna, ponieważ skrypt musiałby wywoływać zmiany katalogów w trakcie procesu.
źródło