Advertisement
ItsMeLucifer

Sorting FIles Bash

Dec 15th, 2019 (edited)
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.32 KB | None | 0 0
  1. #!/bin/bash
  2. args=("${@}")
  3. #Funkcja wyświetlania instrukcji
  4. pom() {
  5. echo "Instrukcja: $0 /typ <directory|file> [/time <newest|oldest>]";
  6. echo "Jesli uzytkownik nie poda parametru /time - program posortuje od ostatnio modyfikowanych";
  7. exit 1;}
  8. #Bez podania argumentow
  9. if [ ! $1 ]
  10. then
  11.     pom
  12. fi
  13. #Dla podanych argumentow
  14. for i in "${!args[@]}"
  15. do
  16. case "${args[$i]}" in
  17.     #Rozne rodzaje help, uwzględniając składnie linixa
  18.     -h)
  19.     pom
  20.     ;;
  21.     --help)
  22.     pom
  23.     ;;
  24.     #1 parametr - sprawdza czy jest directory lub file, jezeli nie to wyswietla pomoc
  25.     /typ)
  26.             typ=${args[$i+1]}
  27.             [ "$typ" = "directory"  ] || [ "$typ" = "file" ] || pom;;
  28.     #2 parametr - sprawdza czy jest newest lub oldest, jezeli nie to wyswietla pomoc
  29.     /time)
  30.             time=${args[$i+1]}
  31.             [ "$time" = "newest"  ] || [ "$time" = "oldest" ] || pom;;
  32. esac
  33. done
  34. #Sortowanie
  35. case "$typ" in
  36.     file)
  37.     #Podlicza ilosc wyswietlonych plikow, posortowanych od ostatnio modyfikowanych
  38.     il=`ls -p1c | grep -v /$ | wc -l`
  39.     #Za pomoca linuxowego "kalkulatora" oblicza 10% z obliczonej ilosci
  40.     il=`echo $il/10 | bc`
  41.     if [ "$time" != "oldest" ]
  42.     then
  43.     #sortuje od ostatnio modyfikowanych, po czym wyswietla jedynie IL pierwszych pozycji. Zmienną IL obliczylismy wczesniej. Do grepa przesylamy wyswietlona liste posortowanych plikow (p-po folderach pokazuje slash, c-sortowanie od ostatnio modyfikowanych, 1- jedna dana na jedna linijke) rozdziela dane za pomoca nowej lini. Na samym koncu, dane ktore zawiera grep, sa ucinane za pomoca funkcji head.
  44.         ls -p1c | grep -v /$ | head -n $il
  45.     else
  46.     #Tutaj to samo co wczesniej, jednak odwraca liste wyswietlaną (najpierw odwraca, pozniej ucina pierwsze il opcji), dzieki parametrowi 'r'.
  47.         ls -p1cr | grep -v /$ | head -n $il
  48.     fi
  49.     ;;
  50.     directory)
  51.     #Tak samo sortuje jak w time, tylko że po folderach. Dzięki '*/' wyswietla slasha po folderach. Wordcounter zlicza slowa jak wczesniej.
  52.         il=`ls -1d */ | wc -l`
  53.     #Identycznie tak samo
  54.         il=`echo $il/10 | bc`
  55.     if [ "$time" != "oldest" ]
  56.     then
  57.     #Zasada dzialania ta sama, jedynie rozni sie uzywaniem 'd' - od directory, czyli ls wyswietla foldery
  58.         ls -1dc */ | head -n $il
  59.     else
  60.         ls -1dcr */ | head -n $il
  61.     fi
  62.     ;;
  63. esac
  64. #Koniec skryptu
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement