Bash – wybredne kopiowanie

Domyślnym katalogiem na pobieranie plików w moich przeglądarkach, jest pulpit. Stamtąd rozdzielam pliki wedle własnego widzi mi się, jednak pewną klasę plików, życzę sobie mieć zawsze w pewnym specyficznym katalogu. Do tej pory, przenosiłem je tam ręcznie, ale uświadomiłem sobie, że przecież nie jest trudno proces ten zautomatyzować. Po pięciu minutach powstała ta oto linijka:

" = "" ] && cp "$1" ""

Ten skrypt oczywiście wykorzystuje do otwierania pliku z poziomu przeglądarki. Najwięcej problemu było ze sprawdzeniem poprawności zadanego parametru ($1). Należało jednak upewnić się, czy parametr jest plikiem (to z pomocą: -f) i czy ma zadane rozszerzenie. Zamieszczam, aby mi się nie zgubiło. Na co warto zwrócić uwagę:

  • ${1##*.} – to wyrażenie zwraca rozszerzenie pliku (tutaj dla zmiennej $1). Dla nazwy np. “nazwa.z.kropkami.txt”, zwróci “txt”. Po sieci można znaleźć wersje z jednym płotkiem (#), ale wtedy wynikiem są wszystkie znaki po pierwszej kropce (szczegóły w załączonych linkach)
  • [ (...) -a (...) ] – I (ang. AND) w składni programu test, używanego przy warunkach w Bashu

Z pomocą: bash String Manipulations i Linux tip: Bash test and comparison functions.

6 thoughts on “Bash – wybredne kopiowanie

  1. [ (...) -a (...) ] – I (ang. AND) w Bashu

    Nie w bashu, tylko po prostu taka jest składnia polecenia test (a.k.a. [ ... ]). (Choć wieść gminna niesie, że jest to mniej przenośne).

    Rozszerzenie, można też ładnie sprawdzać używając case:

    case "$1" in *.rozszerzenie)
        if test -f "$1"; then
            cp -t "katalog" -- "$1"
        fi
    esac
    

    Like

  2. Nie w bashu, tylko po prostu taka jest składnia polecenia test

    Wiem, ale jakoś tak to zostawiłem. Może być teraz?

    Rozszerzenie, można też ładnie sprawdzać używając case:

    Bardzo ładnie.

    Like

  3. Sigvatr, więc nie cron, a incron – czyli inotify cron. Zawiera instrukcje dla demona incrond typu: wykonaj “to” w przypadku “takiego” zdarzenia systemu plików. W przypadku pobierania plików może Ci się przydać zdarzenie INCLOSEWRITE. Np:
    /home/sigvatr/Desktop INCLOSEWRITE /jakis/skrypt $#. Wtedy obojętne czym pobierasz; ważne, że zapisujesz na pulpicie a skryptem kontrolujesz co gdzie trafia. O reszcie zastosowań i funkcjonalności przeczytasz w manualu i w internecie (incron|incrontab|inotify).

    Like

  4. Tak, teraz rozumiem.
    Przy okazji, a jeden z moich wykładowców kiedyś narzekał, że nie ma podobnych mechanizmów w linuksowych systemach plików (w przeciwieństwie do windowsowych).

    Like

Comments are closed.