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. ;-)
Zostaw komentarz