Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 1
  • 30

Witam.

Mam strukturę katalogów:

/data/folder1/html

/data/folder2/334455/html

data/folder2/667788/html

/data/folder3/3/html

/data/folder3/4/html

/data/folder5/3344/

Muszę zliczyć wielkość plików dla folderu html w  folder1 folder2 folder3.

Czyli wynik musiałby wyglądać tak:

folder1 2Gb

folder2 1Gb

folder3 2Gb

folder4 nie zawiera folderu html

Czy jest to jakoś możliwe do wykonania?

Pozdrawiam.

 

Tomasz
  • Zapytał
  • @ Tomasz | 28.03.2017
    • 9
    • 2
    • 23
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 4

Spróbujmy. Utworzyłem taką strukturę katalogów z plikami:

root@uml:~# find /data/ -ls
  1962241      4 drwxr-xr-x   6 root     root         4096 mar 29 17:48 /data/
  1962252      4 drwxr-xr-x   3 root     root         4096 mar 29 17:48 /data/folder5
  1962253      4 drwxr-xr-x   2 root     root         4096 mar 29 18:03 /data/folder5/3344
  1962258   1024 -rw-r--r--   1 root     root      1048576 mar 29 18:03 /data/folder5/3344/b
  1962244      4 drwxr-xr-x   3 root     root         4096 mar 29 17:48 /data/folder2
  1962245      4 drwxr-xr-x   3 root     root         4096 mar 29 17:48 /data/folder2/334455
  1962246      4 drwxr-xr-x   2 root     root         4096 mar 29 18:02 /data/folder2/334455/html
  1962254   1024 -rw-r--r--   1 root     root      1048576 mar 29 18:02 /data/folder2/334455/html/a
  1962242      4 drwxr-xr-x   3 root     root         4096 mar 29 17:48 /data/folder1
  1962243      4 drwxr-xr-x   2 root     root         4096 mar 29 18:03 /data/folder1/html
  1962255   1024 -rw-r--r--   1 root     root      1048576 mar 29 18:03 /data/folder1/html/a
  1962247      4 drwxr-xr-x   4 root     root         4096 mar 29 17:48 /data/folder3
  1962250      4 drwxr-xr-x   3 root     root         4096 mar 29 17:48 /data/folder3/4
  1962251      4 drwxr-xr-x   2 root     root         4096 mar 29 18:03 /data/folder3/4/html
  1962256   1024 -rw-r--r--   1 root     root      1048576 mar 29 18:03 /data/folder3/4/html/a
  1962248      4 drwxr-xr-x   3 root     root         4096 mar 29 17:48 /data/folder3/3
  1962249      4 drwxr-xr-x   2 root     root         4096 mar 29 18:03 /data/folder3/3/html
  1962257   1024 -rw-r--r--   1 root     root      1048576 mar 29 18:03 /data/folder3/3/html/a

Na początku wybierzmy katalogi które nazywają się html:

root@uml:~#  find /data/ -name 'html'
/data/folder2/334455/html
/data/folder1/html
/data/folder3/4/html
/data/folder3/3/html

Następnie policzmy ich rozmiar w jakiejś określonej jednostce, np. w kilobajtach:

root@uml:~# find /data/ -name 'html' |xargs du -sk
1028	/data/folder2/334455/html
1028	/data/folder1/html
1028	/data/folder3/4/html
1028	/data/folder3/3/html

Teraz wybierzmy z tego to co nas interesuje - rozmiar i katalog nadrzędny:

root@uml:~# find /data/ -name 'html' |xargs du -sk |cut -f -3 -d '/'
1028	/data/folder2
1028	/data/folder1
1028	/data/folder3
1028	/data/folder3

No i na koniec zostaje nam sparsowanie tego i zsumowanie rozmiarów z powtarzających się katalogów:

root@uml:~# find /data/ -name 'html' |xargs du -sk |cut -f -3 -d '/' |awk '{arr[$2]+=$1} END { for (x in arr) print x, arr[x] } '
/data/folder1 1028
/data/folder2 1028
/data/folder3 2056

Dla wyjaśnienia funkcja awka:

{arr[$2]+=$1} - dla każdej linii na wejściu dodaje do wpisu w tablicy określanej drugim polem (czyli nazwą katalogu) wartość pierwszego pola (czyli rozmiar).

END { for (x in arr) print x, arr[x] } - na końcu - wypisuje wszystkie klucze (katalogi) i następnie ich wartości.

 

 

Andrzej_Dopierała
  • Odpowiedział
  • @ Andrzej_Dopierała | 29.03.2017
    • lider
    • laureat
    • ekspert
    • 83
    • 65
    • 169
Komentarze
Ekstremalnie fajnie to działa. Zapiszę sobie na przyszłosć. Serdecznie dziękuję.
Skomentował : @ Tomasz ,30.03.2017
  • 9
  • 2
  • 23