elwin013's blog

kawałek sieci młodego geeka

Witaj na moim blogu. Nazywam się Kamil elwin013 Banach. Jestem dwudziestokilkuletnim pasjonatem komputerowym z okolic Zamościa. Aktualnie na emigracji w Warszawie - studia na Wojskowej Akademii Technicznej.

Bash #3: lister plików z katalogu z dodatkami

Dawno nie było już wpisu o Bashu – wypadałoby to nadrobić. Tym razem trochę bardziej skomplikowane zadanie związane z listowaniem zawartości katalogu. Enjoy ;-)

Zadanie: Napisz skrypt wyświetlający listę plików z zadanego katalogu, którego przekraczają dany parametrem rozmiar. Wyświetlone pliki powinny być posortowane według: wielkości, nazw, czasu ostatniej modyfikacji w zależności od parametru.

Rozwiązanie:

#!/bin/bash
SIZE=$1
MODE=$2
DIR=$3
FILES=$(find $DIR -maxdepth 1 -type f -size +$SIZE)    #1
if [ "$FILES" = "" ]; then exit 
fi
case $MODE in
   n) ls $FILES -X | xargs -n1 basename ;;              #2
   s) ls $FILES -s | sort -n | awk -F/ '{print $NF}' ;; #3
   t) ls $FILES -t | xargs -n1 basename ;;              #4
esac

W powyższym rozwiązaniu wybieram wszystkie pliki z folderu (bez zagłębiania się w podkatalogi) $DIR o rozmiarze większym niz $SIZE (pierwszy parametr) i zachowuje ich listę do zmiennej $FILES. (#1) Następnie zależnie od parametru listuje pliki według nazwy (#2), rozmiaru (#3) lub daty powstania (#4). Jednocześnie używając pipe’a obcinam każdą linie by wyświetlić tylko samą nazwę plików. Przy pomocy xargs -n1 basename z pełnej ścieżki pliku wycinam tylko jego nazwę. W przypadku sortowania wg rozmiaru każda linia to dwie kolumny – rozmiar oraz nazwa pliku – a przy pomocy awk -F/ '{print $NF}' wyświetlam ostatnią kolumnę, czyli nazwę.

I to by było na tyle. Być może da się to dużo prościej i ładniej, jednak to rozwiązanie było pisane na szybko i przede wszystkim działa. ;-)


Podziel się z innymi!

    Zostaw komentarz