Rekurencyjne zliczanie plików w katalogu Linux


728

Jak rekurencyjnie liczyć pliki w katalogu Linux?

Znalazłem to:

find DIR_NAME -type f ¦ wc -l

Ale gdy go uruchomię, zwraca następujący błąd.

find: ścieżki muszą poprzedzać wyrażenie: ¦


64
Mylisz łamany pasek ¦(ASCII 166) z pionowym paskiem |(ASCII 124) używanym dla potoku UNIX .
Skippy le Grand Gourou

7
@SkippyleGrandGourou Czy to się nie nazywa fajka?
DaveStephens

27
@DaveStephens Tak, to się nazywa tak. Nazywa się to również pociągnięciem Sheffera, pionowym paskiem, vbar, drążkiem, pionową linią, pionowym cięciem, prętem, obeliskiem, poślizgiem.
emlai

64
@zenith Nazywam to po prostu Bob.
Christopher

15
W RFC20 nazywa się to „linią pionową”. „Rura” to nazwa operatora powłoki, a nie nazwa symbolu. Podobnie jak *„gwiazdka” ASCII, ale „razy” w niektórych innych kontekstach.
szczupły

Odpowiedzi:


1325

To powinno działać:

find DIR_NAME -type f | wc -l

Wyjaśnienie:

  • -type f zawierać tylko pliki.
  • |( i nie¦ ) przekierowuje findstandardowe wyjście wcpolecenia na standardowe wejście polecenia.
  • wc(skrót od liczby słów) zlicza nowe wiersze, słowa i bajty na wejściu ( docs ).
  • -l policzyć tylko nowe linie.

Uwagi:

  • Wymień DIR_NAMEsię ., aby wykonać polecenie w bieżącym folderze.
  • Możesz również usunąć, -type faby uwzględnić katalogi (i dowiązania symboliczne) w liczeniu.
  • Możliwe, że to polecenie zostanie przeliczone, jeśli nazwy plików mogą zawierać znaki nowej linii.

Wyjaśnienie, dlaczego twój przykład nie działa:

W poleceniu, które pokazałeś, nie używasz „Pipe” ( |) do łączenia dwóch poleceń, ale zepsuty pasek ( ¦), którego powłoka nie rozpoznaje jako polecenia lub czegoś podobnego. Dlatego pojawia się ten komunikat o błędzie.


26
fW -type fstojaki dla plików i wc -lsłownego linii liczy.
Serge Stroobandt,

3
Usuń -type fuwzględniające katalogi w liczniku
phatblat

3
-printFlaga nie jest potrzebna
Zoltán

3
Jeśli istnieje możliwość, że nazwy plików zawierają znak nowej linii, możesz chcieć użyć -print0flagi.
gaboroncancio

2
@ gaboroncancio To nie pomoże, chyba że niektóre implementacje wcmają opcję odczytu listy zakończonej zerem . Zobacz moją odpowiedź na alternatywę.
Przywróć Monikę, proszę,

100

Dla bieżącego katalogu:

find -type f | wc -l

5
To rozwiązanie nie bierze pod uwagę nazw plików zawierających znaki nowej linii.
Kusalananda,

2
W bieżącym katalogu nie potrzebujesz nawet.
baptx

1
Faktycznie, na niektórych platformach, to nie trzeba przeliterowaćfind .
tripleee

1
@Kusalanandra Twój komentarz dotyczy prawie każdej odpowiedzi tutaj.
tripleee

69

Jeśli potrzebujesz podziału na liczbę plików w każdym katalogu w bieżącym katalogu:

for i in */ .*/ ; do 
    echo -n $i": " ; 
    (find "$i" -type f | wc -l) ; 
done

Oczywiście wszystko to może przebiegać w jednej linii. Nawiasy wyjaśniają, czyje wyjście wc -lma być obserwowane ( find $i -type fw tym przypadku).


7
Może utknąć w katalogach ze spacjami w nazwach. Zmiana pierwszej linii, aby find . -maxdepth 1 -type d -print0 | while IFS= read -r -d '' i ; doto naprawić. Zobacz Jak mogę odczytać plik (strumień danych, zmienna) wiersz po wierszu (i / lub pole po polu)?
Arch Stanton

4
Korzystanie findz pętli zewnętrznej jest po prostu niepotrzebną komplikacją. for i in */; do`
tripleee

funkcja countit {dla i w $ (find. -maxdepth 1 -type d); do file_count = $ (znajdź $ i -type f | wc -l); echo "$ file_count: $ i"; gotowy }; countit | sort -n -r
Schneems,

Wreszcie tego potrzebowałem. Moje foldery mają tysiące plików, więc drukowanie ich z drzewa lub czegokolwiek innego nie wchodzi w grę
lesolorzanov

Obejmuje to ../ i nie wydaje się iść naprzód - co oznacza, że ​​nie jest regresywne.
Daniel Lefebvre

50

Możesz użyć

$ tree

po zainstalowaniu pakietu drzewa za pomocą

$ sudo apt-get install tree

(na komputerze z systemem Linux Debian / Mint / Ubuntu).

Polecenie pokazuje osobno nie tylko liczbę plików, ale także liczbę katalogów. Opcji -L można użyć do określenia maksymalnego poziomu wyświetlania (który domyślnie jest maksymalną głębokością drzewa katalogów).

Ukryte pliki można również dołączyć, podając -aopcję.


4
Jest to w rzeczywistości najprostszy sposób na sprawdzenie liczby katalogów i plików.
Lorem Ipsum Dolor

11
Ze strony podręcznika: Domyślnie drzewo nie drukuje ukrytych plików . Musisz podać -aopcję ich włączenia.
eee

3
Aby zainstalować to w systemie macOS, użyj brewi uruchom brew install tree, najlepiej po uruchomieniu brew update.
Ashish Ahuja,

4
Drukuje również wszystkie nazwy plików, więc będzie wolno, jeśli masz wiele plików.
Franck Dernoncourt

2
Wow, bardzo ładne narzędzie, może drukować foldery pokolorowane, wyświetlać tylko foldery, wyświetlać jako JSON. Może wyświetlić listę 34 000 folderów i 51 000 plików w ciągu kilku sekund. Olé!
brasofilo,

46

Na moim komputerze rsyncjest trochę szybszy niż find | wc -lw zaakceptowanej odpowiedzi:

$ rsync --stats --dry-run -ax /path/to/dir /tmp

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

Drugi wiersz ma liczbę plików, 150,481 w powyższym przykładzie. Jako bonus otrzymasz także całkowity rozmiar (w bajtach).

Uwagi:

  • pierwszy wiersz to liczba plików, katalogów, dowiązań symbolicznych itp., dlatego jest większy niż drugi wiersz.
  • --dry-run(lub -nopcja w skrócie) jest ważne, aby nie faktycznie przenieść pliki!
  • Użyłem -xopcji „nie przekraczaj granic systemu plików”, co oznacza, że ​​jeśli ją /wykonasz i masz podłączone zewnętrzne dyski twarde, to policzy tylko pliki na partycji głównej.

Podoba mi się twój pomysł użycia rsync tutaj. Nigdy bym o tym nie pomyślał!
Qeole,

Dzięki @Qeole, pomysł nie jest mój. Przeczytałem go kilka lat temu, że rsync jest najszybszym narzędziem do usuwania folderu z dużą ilością plików i podfolderów, więc pomyślałem, że szybkie może być również zliczanie plików.
psmith

1
Próbowałem tego. Po dwukrotnym uruchomieniu obu stron w celu zapełnienia pamięci podręcznej fs, find ~ -type f | wc -lzajęło 1,7 / 0,5 / 1,33 sekundy (real / user / sys). rsync --stats --dry-run -ax ~ /xxxzajęło 4,4 / 3,1 / 2,1 sekundy. To dotyczy około 500 000 plików na dysku SSD.
szczupły

Nie wiem, jakiej wersji rsync użyłeś, ale w 3.1.2 trochę łatwiej jest przeczytać:Number of files: 487 (reg: 295, dir: 192)
mpen

Użyłem domyślnego rsync na macOS:rsync version 2.6.9 protocol version 29
psmith

20

Ponieważ nazwy plików w systemie UNIX mogą zawierać znaki nowej linii (tak, nowe linie), wc -lmogą liczyć zbyt wiele plików. Wydrukowałbym kropkę dla każdego pliku, a następnie policzyłem kropki:

find DIR_NAME -type f -printf "." | wc -c

1
Wygląda na to, że jest to jedyne rozwiązanie, które obsługuje pliki z nazwami nowej linii. Pozytywne.
codeforester,

2
hihi :) Uwielbiam znaki nowej linii w nazwach plików. To sprawia, że ​​są po prostu bardziej czytelne.
hek2mgl,

Znaczy nowe wiersze w nazwach plików, a nie w treści!
codeforester,

1
Tylko żartowałem ... Tak, zawsze trzeba brać pod uwagę nowe wiersze w nazwach plików. Mogą pochodzić ze złośliwych treści lub mniej spektakularnych, z literówki.
hek2mgl

18

Łącząc kilka odpowiedzi tutaj razem, najbardziej użytecznym rozwiązaniem wydaje się być:

find . -maxdepth 1 -type d -print0 |
xargs -0 -I {} sh -c 'echo -e $(find "{}" -printf "\n" | wc -l) "{}"' |
sort -n

Może obsługiwać dziwne rzeczy, takie jak nazwy plików, które zawierają nawiasy spacji, a nawet nowe linie. Sortuje również dane wyjściowe według liczby plików.

Możesz zwiększyć liczbę po, -maxdepthaby policzyć również podkatalogi. Pamiętaj, że może to potencjalnie zająć dużo czasu, szczególnie jeśli masz mocno zagnieżdżoną strukturę katalogów w połączeniu z dużą -maxdepthliczbą.


Co oznacza echo -e? Wydaje mi się, że umieścisz go, by spasować dowolne znaki nowej linii, ale będzie to również zniekształcać każdą inną nieregularną białą spację i spróbuje rozwinąć dowolne znaki zastępcze obecne dosłownie w nazwach plików. Po prostu wybrałbym coś podobnego find .* * -type d -execdir sh -c 'find . -type f -printf "\n" | wc -l; pwd'i żyłbym z wszelkimi aberracjami w danych wyjściowych, a może bawiłem się Bash'em printf "%q"do drukowania nazwy katalogu.
tripleee

10

Jeśli chcesz wiedzieć, ile plików i podkatalogów istnieje z bieżącego katalogu roboczego, możesz użyć tego jednowierszowego

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

Działa to w wersji GNU i po prostu pomija -e w poleceniu echo dla Linuksa BSD (np. OSX).


2
Doskonałe rozwiązanie! Jedyny problem, jaki znalazłem, to katalogi ze spacjami lub znaki specjalne. Dodaj cytaty, w których używana jest nazwa katalogu:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find "{}" | wc -l) "{}"' | sort -n
John Kary

1
Trochę go zmodyfikowałem i działa całkiem dobrze:find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo $(find {} | wc -l) \\t {}' | sort -rn | less
Wizek

Obowiązują tu także moje komentarze do odpowiedzi @ Sebastiana. Użycie echo -e(lub po prostu „echo” jak w poprzednim komentarzu) w niecytowanej nazwie katalogu powoduje zamianę jednego problemu na drugi.
tripleee

8

Jeśli chcesz uniknąć przypadków błędów, nie zezwalaj wc -lna wyświetlanie plików z nowymi liniami (które będą liczone jako 2+ plików)

np. rozważmy przypadek, w którym mamy jeden plik z jednym znakiem EOL

> mkdir emptydir && cd emptydir
> touch $'file with EOL(\n) character in it'
> find -type f
./file with EOL(?) character in it
> find -type f | wc -l
2

Ponieważ przynajmniej gnu wcwydaje się nie mieć opcji odczytu / zliczenia listy zakończonej zerem (oprócz pliku), najłatwiejszym rozwiązaniem byłoby po prostu nie przekazywanie jej nazw plików, ale statyczne wyjście za każdym razem, gdy plik zostanie znaleziony, np. w tym samym katalogu co powyżej

> find -type f -exec printf '\n' \; | wc -l
1

Lub jeśli findto obsługuje

> find -type f -printf '\n' | wc -l
1 

7

Możesz użyć polecenia ncdu. Rekurencyjnie policzy, ile plików zawiera katalog Linux. Oto przykład wyniku:

wprowadź opis zdjęcia tutaj

Ma pasek postępu, co jest wygodne, jeśli masz wiele plików:

wprowadź opis zdjęcia tutaj

Aby zainstalować go na Ubuntu:

sudo apt-get install -y ncdu

Benchmark: Użyłem https://archive.org/details/cv_corpus_v1.tar (380390 plików, 11 GB) jako folderu, w którym należy policzyć liczbę plików.

  • find . -type f | wc -l: do ukończenia około 1m20s
  • ncdu: do ukończenia około 1m20s

To głównie oblicza użycie dysku, a nie liczbę plików. Ten dodatkowy narzut prawdopodobnie nie jest pożądany. (oprócz potrzeby instalowania dodatkowego pakietu do czegoś, co można zrobić za pomocą standardowych narzędzi POSIX)
hek2mgl

@ hek2mgl Oblicza liczbę plików, jak pokazano na czerwono na pierwszym zrzucie ekranu. Zajęło mi kilka minut na ~ 2 miliony plików, więc prędkość nie jest taka zła.
Franck Dernoncourt

2
@ hek2mgl W odpowiedzi dodałem powtarzalny test porównawczy, uruchomiłem go dwa razy i nie zauważyłem żadnej różnicy między find . -type f | wc -l i ncdu.
Franck Dernoncourt

2
tak, wygląda na findto , że pod maską wykonuje mniej więcej takie same wywołania systemowe, jak dla duktórych jest backend ncdu. Właśnie ich straciłem.
hek2mgl

1
@FranckDernoncourt uwielbiał to. Mam mnóstwo plików w folderze i posiadanie paska postępu oszczędza życie. Dzięki za udostępnienie!
Geek


4

Aby ustalić, ile plików znajduje się w bieżącym katalogu, włóż ls -1 | wc -l. To służy wcdo zliczenia liczby linii (-l)na wyjściu ls -1. Nie liczy plików dotfiles. Proszę to zanotowaćls -l (to jest „L” zamiast „1” jak w poprzednich przykładach), których użyłem w poprzednich wersjach tego HOWTO, faktycznie da ci liczbę plików o jeden większą niż faktyczna liczba. Dzięki Kam Nejad za ten punkt.

Jeśli chcesz liczyć tylko pliki i NIE zawierasz dowiązań symbolicznych (tylko przykład tego, co jeszcze możesz zrobić), możesz użyć ls -l | grep -v ^l | wc -l(to tym razem „L”, a nie „1”, chcemy tutaj „długiej” listy) . grepsprawdza każdą linię zaczynającą się na „l” (wskazującą łącze) i odrzuca tę linię (-v).

Szybkość względna: „ls -1 / usr / bin / | wc -l” zajmuje około 1,03 sekundy na nieobciążonym 486SX25 (/ usr / bin / na tym komputerze ma 355 plików). „ ls -l /usr/bin/ | grep -v ^l | wc -l” zajmuje około 1,19 sekundy.

Źródło: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


2
ls -lmusi wykonać statsyscall na każdym pliku, aby odczytać jego rozmiar, mtime i inne właściwości, co jest wolne. W dużych katalogach (ponad 100 000 plików) uruchomienie ls -lmoże potrwać kilka minut. Aby liczyć tylko pliki, zawsze używaj ls -1 | wc -l.
Marki555,

A 486SX25, ładne
cam8001

ls -1wciąż może być powolny w dużych katalogach, ponieważ musi sortować pliki. Po prostu printf '%s\n' *robi to samo i unika zewnętrznego lspołączenia (które i tak jest problematyczne ), ale najskuteczniejszym rozwiązaniem jest użycie polecenia, które nie wykonuje żadnego sortowania, takiego jak find. (Globalny wynik jest sortowany według powłoki.)
tripleee

4

Jeśli potrzebujesz rekurencyjnie policzyć określony typ pliku , możesz:

find YOUR_PATH -name '*.html' -type f | wc -l 

-l służy tylko do wyświetlenia liczby linii na wyjściu.


Rozszerzenie jest częścią nazwy pliku i może nie reprezentować pliku TYPE
Waxhead

4

Z uderzeniem:

Utwórz tablicę wpisów za pomocą () i uzyskaj liczbę za pomocą #.

FILES=(./*); echo ${#FILES[@]}

Ok, nie rekurencyjnie liczę plików, ale najpierw chciałem pokazać prostą opcję. Typowym przypadkiem użycia może być tworzenie kopii zapasowych najazdu pliku. Spowoduje to utworzenie logfile.1, logfile.2, logfile.3 itd.

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

Liczba rekurencyjna przy globstarwłączonej wersji bash 4+ (jak wspomniano w @tripleee)

FILES=(**/*); echo ${#FILES[@]}

Aby rekurencyjnie uzyskać liczbę plików, nadal możemy używać find w ten sam sposób.

FILES=(`find . -type f`); echo ${#FILES[@]}

Nowoczesne powłoki obsługują **/*wyliczanie rekurencyjne. Jest to nadal mniej wydajne niż findw przypadku dużych katalogów, ponieważ powłoka musi sortować pliki w każdym katalogu.
tripleee

2

W przypadku katalogów ze spacjami w nazwie ... (na podstawie różnych odpowiedzi powyżej) - rekurencyjnie wypisz nazwę katalogu z liczbą plików w:

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done

Przykład (sformatowany dla czytelności):

pwd
  /mnt/Vancouver/Programming/scripts/claws/corpus

ls -l
  total 8
  drwxr-xr-x 2 victoria victoria 4096 Mar 28 15:02 'Catabolism - Autophagy; Phagosomes; Mitophagy'
  drwxr-xr-x 3 victoria victoria 4096 Mar 29 16:04 'Catabolism - Lysosomes'

ls 'Catabolism - Autophagy; Phagosomes; Mitophagy'/ | wc -l
  138

## 2 dir (one with 28 files; other with 1 file):
ls 'Catabolism - Lysosomes'/ | wc -l
  29

Struktura katalogów jest lepiej wizualizowana za pomocą tree:

tree -L 3 -F .
  .
  ├── Catabolism - Autophagy; Phagosomes; Mitophagy/
  │   ├── 1
  │   ├── 10
  │   ├── [ ... SNIP! (138 files, total) ... ]
  │   ├── 98
  │   └── 99
  └── Catabolism - Lysosomes/
      ├── 1
      ├── 10
      ├── [ ... SNIP! (28 files, total) ... ]
      ├── 8
      ├── 9
      └── aaa/
          └── bbb

  3 directories, 167 files

man find | grep mindep
  -mindepth levels
    Do not apply any tests or actions at levels less than levels
    (a non-negative integer).  -mindepth 1 means process all files
    except the starting-points.

ls -p | grep -v /(użyte poniżej) pochodzi z odpowiedzi 2 na /unix/48492/list-only-regular-files-but-not-directories-in-current-directory

find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done
./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
./Catabolism - Lysosomes: 28
./Catabolism - Lysosomes/aaa: 1

Zastosowanie: Chcę znaleźć maksymalną liczbę plików spośród kilkuset katalogów (cała głębokość = 1) [dane wyjściowe ponownie sformatowane dla czytelności]:

date; pwd
    Fri Mar 29 20:08:08 PDT 2019
    /home/victoria/Mail/2_RESEARCH - NEWS

time find . -mindepth 1 -type d -print0 | while IFS= read -r -d '' i ; do echo -n $i": " ; ls -p "$i" | grep -v / | wc -l ; done > ../../aaa
    0:00.03

[victoria@victoria 2_RESEARCH - NEWS]$ head -n5 ../../aaa
    ./RNA - Exosomes: 26
    ./Cellular Signaling - Receptors: 213
    ./Catabolism - Autophagy; Phagosomes; Mitophagy: 138
    ./Stress - Physiological, Cellular - General: 261
    ./Ancient DNA; Ancient Protein: 34

[victoria@victoria 2_RESEARCH - NEWS]$ sed -r 's/(^.*): ([0-9]{1,8}$)/\2: \1/g' ../../aaa | sort -V | (head; echo ''; tail)

    0: ./Genomics - Gene Drive
    1: ./Causality; Causal Relationships
    1: ./Cloning
    1: ./GenMAPP 2
    1: ./Pathway Interaction Database
    1: ./Wasps
    2: ./Cellular Signaling - Ras-MAPK Pathway
    2: ./Cell Death - Ferroptosis
    2: ./Diet - Apples
    2: ./Environment - Waste Management

    988: ./Genomics - PPM (Personalized & Precision Medicine)
    1113: ./Microbes - Pathogens, Parasites
    1418: ./Health - Female
    1420: ./Immunity, Inflammation - General
    1522: ./Science, Research - Miscellaneous
    1797: ./Genomics
    1910: ./Neuroscience, Neurobiology
    2740: ./Genomics - Functional
    3943: ./Cancer
    4375: ./Health - Disease 

sort -Vjest rodzajem naturalnym. ... Tak więc moja maksymalna liczba plików w dowolnym z tych katalogów (Claws Mail) to 4375 plików. Jeśli zostawię lewy pad ( https://stackoverflow.com/a/55409116/1904943 ) te nazwy plików - wszystkie są nazwane numerycznie, zaczynając od 1, w każdym katalogu - i pad do 5 cyfr łącznie, powinienem być w porządku .


Uzupełnienie

Znajdź całkowitą liczbę plików, podkatalogów w katalogu.

$ date; pwd
Tue 14 May 2019 04:08:31 PM PDT
/home/victoria/Mail/2_RESEARCH - NEWS

$ ls | head; echo; ls | tail
Acoustics
Ageing
Ageing - Calorie (Dietary) Restriction
Ageing - Senescence
Agriculture, Aquaculture, Fisheries
Ancient DNA; Ancient Protein
Anthropology, Archaeology
Ants
Archaeology
ARO-Relevant Literature, News

Transcriptome - CAGE
Transcriptome - FISSEQ
Transcriptome - RNA-seq
Translational Science, Medicine
Transposons
USACEHR-Relevant Literature
Vaccines
Vision, Eyes, Sight
Wasps
Women in Science, Medicine

$ find . -type f | wc -l
70214    ## files

$ find . -type d | wc -l
417      ## subdirectories

1

Napisałem ffcnt aby przyspieszyć liczenie plików rekurencyjnych w określonych okolicznościach: dyski obrotowe i systemy plików, które obsługują mapowanie zasięgu.

Może to być rząd wielkości szybszy niż lslub findpodejście oparte, ale YMMV.


0

Tutaj jest wiele poprawnych odpowiedzi. Oto kolejny!

find . -type f | sort | uniq -w 10 -c

gdzie .jest folder do przeszukania i 10liczba znaków, według której należy pogrupować katalog.


-1

znajdź -type f | wc -l

LUB (jeśli katalog jest katalogiem bieżącym)

odnaleźć . -typ f | wc -l


To powiela co najmniej jedną inną odpowiedź na to samo pytanie.
Kusalananda,

-1

To zadziała całkowicie dobrze. Prosty krótki. Jeśli chcesz policzyć liczbę plików obecnych w folderze.

ls | wc -l

3
Po pierwsze, to nie odpowiada na pytanie. Pytanie dotyczy rekurencyjnego zliczania plików z katalogu do przodu, a wyświetlane polecenie tego nie robi. ponadto, z ls liczysz katalogi oraz pliki. Ponadto nie ma powodu, aby odpowiadać na stare pytanie, jeśli nie zamierzasz dodawać niczego nowego i nawet nie przeczytasz pytania poprawnie. Powstrzymaj się od tego.
XFCC,

-1

To alternatywne podejście z filtrowaniem formatu liczy wszystkie dostępne moduły jądra grub:

ls -l /boot/grub/*.mod | wc -l

-3
ls -l | grep -e -x -e -dr | wc -l 
  1. długa lista
  2. filtruj pliki i katalogi
  3. policz przefiltrowaną linię nr
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.