Úvod do UNIXu 2016/2017

0  1  2  3  4  5  6  7  8  9  10  11  12 

Cvičení VIII

  1. Úkol z minulé hodiny
  2. Zpracujte výpis ls -l tak, že před symlinky přidáte LINK-->, jinak vypisujete pouze názvy souborů
  3. Vypište všechny symbolické linky z adresáře /etc, nezahrnujte celý podstrom, jen to, co je přímo v adresáři /etc.
  4. Vypište názvy souborů, které se nacházejí /usr/bin i v /bin.
    • ls /usr/bin | sort > /tmp/usr_bin
      ls /bin | sort | comm -12 - /tmp/usr_bin
      rm /tmp/usr_bin
  5. Na začátky lichých řádek souboru /etc/passwd vložte znak „l“, na začátky sudých řádek vložte znak „s“.
    • sed 's/^/l/;n;s/^/s/' < /etc/passwd
    Vypište řádky souboru v obráceném pořadí.
    • nl /etc/passwd | sed -n 'G;$p;h'
  6. Otevřete si v edu nějaký soubor (kopii /etc/passwd), vypište všechny řádky obsahující čísla, nahraďte všechny dvojtečky pomlčkami a uložte.
    • ed <<END
      g/[0-9]/
      s/:/-/g
      w
  7. Pomocí edu oeditujte kopii /etc/passwd, tak, že sudé řádky přidáte za liché, oddělené zavináčem. Tj výsledný soubor bude mít polovinu řádků.

Dnešní témata

Úkol 8(2 + 1 body):
Vytvořte skript, který jako parametry vezme: jméno adresáře a velikost souboru v bytech (=limit).
Poté projde soubory v daném adresáři a ty, které jsou větší než limit, rozdělí tak, že vytvoří soubory file.part.1, file.part.2,...
Přitom platí, že všechny soubory .part jsou menší než limit a "cat file.part.* == file"
Nepoužívejte přepínače splitu -b a -C.
Předpokládejte, že znak má velikost jeden byte a stačí vám rozdělit soubor na řádky.
BONUS: Skript provede to samé, ale soubory .part zkomprimuje např. pomocí gzip. Mělo by jich tedy vzniknout míň.

    • #!/bin/bash
      find $1 -size +$2 | while read file ; do
      size=$(cat $1/$file | wc -c)
      parts=$(( $size / $2 ))
      if [ $(($size % $2)) -eq 0 ] ; then
      split --numeric-suffixes=1 -n$parts $1/$line $line.part
      else
      split --numeric-suffixes=1 -n$(( $parts + 1 )) $1/$line $line.part
      fi
      done
      -->