Få Distribution af Filstørrelser Rekursivt med Bash og Awk i Store Filsystemer

Hvordan kan man få en distribution af filstørrelser rekursivt i en bestemt mappe på et filsystem med millioner af filer ved hjælp af bash/awk?

For at få en distribution af filstørrelser rekursivt i en bestemt mappe på et filsystem med millioner af filer ved hjælp af bash og awk, kan du bruge find-kommandoen til at liste alle filer, stat-kommandoen til at få filstørrelser, og awk til at beregne distributionen.

Hvordan kan man få en distribution af filstørrelser rekursivt i en bestemt mappe på et filsystem med millioner af filer ved hjælp af bash/awk?

For at få en distribution af filstørrelser rekursivt i en bestemt mappe på et filsystem med millioner af filer ved hjælp af bash og awk, kan du følge disse trin:

  1. Brug find-kommandoen til at liste alle filer:
    find /sti/til/mappen -type f

    Dette vil finde alle filer (-type f) rekursivt i den angivne mappe.

  2. Brug stat-kommandoen til at få filstørrelser:
    find /sti/til/mappen -type f -exec stat --format="%s" {} \;

    Dette vil bruge stat-kommandoen til at få størrelsen (%s) af hver fil.

  3. Brug awk til at beregne distributionen:
    find /sti/til/mappen -type f -exec stat --format="%s" {} \; | awk '{size[$1]++} END {for (s in size) print s, size[s]}'

    Dette vil bruge awk til at tælle forekomsterne af hver filstørrelse og derefter udskrive distributionen.

Her er en mere detaljeret forklaring af awk-delen:

  • size[$1]++: Dette opretter en associative array, hvor nøglen er filstørrelsen, og værdien er antallet af forekomster.
  • END {for (s in size) print s, size[s]}: Dette udskriver hver filstørrelse og dens tilsvarende antal forekomster, når alle inputlinjer er behandlet.

Ved at følge disse trin kan du effektivt få en distribution af filstørrelser rekursivt i en bestemt mappe på et filsystem med millioner af filer ved hjælp af bash og awk.