Nowe posty

Autor Wątek: segregowanie plików według rozszerzeń  (Przeczytany 2201 razy)

przemolix

  • Gość
segregowanie plików według rozszerzeń
« dnia: 2015-04-14, 22:44:55 »
Witam, jestem poczatkujacym uzytkownikiem linuxa. Chciałem napisać skrypt który z katalogu pobrane przenosiłby pliki *.mp3 do katalogu pobrane/muzyka, pliki *.jpg do pobrane/obrazy itp. Nie wiem jak to zrobić mimo iż znalazłem podobne, ale jednak spełniające inną funkcję skrypty. Bash znam bardzo słabo, jak narazie zrobiłem tylko kilka prostych skryptów np. Taki ulatwiążący dodawanie aliasów.
Mam nadzieję że spotkam się z życzliwością z waszej strony i że linux mnie do siebie przekona.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
segregowanie plików według rozszerzeń
« Odpowiedź #1 dnia: 2015-04-15, 00:34:03 »
http://pl.wikipedia.org/wiki/Mv_%28Unix%29

https://www.youtube.com/watch?v=cfLxlFxNGuc

Cytuj
Symbole wieloznaczne

Niekiedy istnieje potrzeba wykonania operacji na większej liczbie pliku. Wówczas bardzo przydatna jest znajomość symboli wieloznacznych, pozwalających na ogólne zastąpienie dowolnego znaku lub łańcucha znaków symbolami globalnymi. Do najczęściej wykorzystywanych należą: gwiazdka, znak zapytania i nawias kwadratowy.

* (gwiazdka) - zastępuje dowolny znak lub ciąg znaków. Np. wydając polecenie cp tes*/ spowodujemy skopiowanie do katalogu głównego wszystkich plików, których nazwa zaczyna się od znaków tes
...

http://kik.pcz.pl/soold/mainpage/subject8_2/chapt2.html


Wiecej w google:
http://www.piotr.wolny.pl/lnag/FAQ2.htm
http://kik.pcz.pl/so-add/KSL/lekcje/l_9.html

Jak wyszukiwac w google ?
komendy linuxa znajdziesz wpisujac w google slowa klucze np.
" linux komendy "
jesli chodzi o basha
" bash kurs "
" bash przenoszenie plikow "
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

przemolix

  • Gość
segregowanie plików według rozszerzeń
« Odpowiedź #2 dnia: 2015-04-15, 18:05:18 »
Dziękuję za podane linki. Część z nich już widziałem jednak w pozostałych znalazły się informacje, które na pewno mi się przydadzą w przyszłości.
Wiem o istnieniu symboli wieloznacznych, poleceniu mv ls i o jeszcze kilku rzeczach. Z powyższych linków dowiedziałem się więcej.
stworzyłem coś takiego:

cd ~
ls ~/Pobrane > lista
let count=0
for WORD in `cat lista`
do
   tab[$count]=$WORD
      echo $WORD
      case "$WORD" in
         "*.mp3") mv ~/Pobrane/$WORD ~/Muzyka ;;
         "*") echo "Brak definicji dla pliku:" $WORD
      esac
   ((count++))
done

jednak to nie działa i nie zwraca błędów. Używając echo $WORD  wewnątrz pętli dowiedziałem się, że zawartość listy trafia do tablicy a echo po pętli wskazało że skrypt z niej wychodzi.  Proszę o pomoc.
Ps. Wiem że nawet gdyby skrypt działał poprawnie to tylko wtedy gdy w nazwie pliku nie będzie spacji, ale nad tym pomyślę później.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
segregowanie plików według rozszerzeń
« Odpowiedź #3 dnia: 2015-04-15, 23:51:30 »
- Wystarczylo by np.
mv /home/user/*mp3 /tmp
i to przeniesie pliki z /home/user/ do /tmp
mozna tez tak
mv `pwd`/*mp3 /tmp
i to przeniesie pliki z miejsca z ktorej wykonujesz komde do /tmp

Co do spacji w sciezce, mozna tak:
"/home/user/Moje pliki/"
albo
/home/user/"Moje pliki"/
albo
/home/user/Moje\\ pliki/


Co do powyzszego skryptu to nie wiele rozumiem, chetnie poczytam twoja koncepcje,
co kazda z tych lini ma robic, albo jak ty bys chcial aby skrypt pokolei co robil?
Prosbe swa motywuje iz kiepski ze mnie koder i nie dziala mi dzis youtube,
lub dciagle sie psuje (html5)


Jeszcze cos do pisze
Cytuj
[.@localhost Moje dokumenty]$ `pwd` ls
bash: /home/./PRACE/REPO/Moje: No such file or directory
[.@localhost Moje dokumenty]$ "`pwd`" ls
bash: /home/./PRACE/REPO/Moje dokumenty: Is a directory
takze widzisz , cudzyslow sie przydaje,
a znaczek " ` " znajdziesz z lewej strony klawiatury, obok "Esc",
i ten znaczek powoduje ze slowo pwd jest wykonane jako komenda.

W przypadku operowania na zmiennych lubie bardzo dawac w nawiasach np.
a=$(uname -a)
echo " Twoj system jest $a "

Poprawione:
Wlasnie sie dowiedzialem ze
echo $a
to wynik bedzie w 1 lini, a jak dam w cudzyslow
echo "$a"
to bedzie ladnie sformatowany jak chcialem i jak byl orginalnie.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.

przemolix

  • Gość
segregowanie plików według rozszerzeń
« Odpowiedź #4 dnia: 2015-04-16, 19:45:07 »
Ponownie dziękuje za pomoc.
Często na matmie szukam skomplikowanych sposobów rozwiązania zadania a okazuje się że było ono banalne. Tak i w tym przypadku nie pomyślałem że można zwyczajnie podać jako nazwę pliku do przeniesienia "*mp3".
Może w przyszłości nie będę tak kombinował:)
moja koncepcja zakładała, że nazwy plików zostaną po kolei umieszczone w tablicy a następnie skrypt będzie sprawdzał końcówkę nazwy i wstawiał ją do polecenia znajdującego się po odpowiednim warunku.
Nie dość, że byłoby to pracochłonne to jeszcze niemal nie możliwe do wykonania bo co chwilę pojawiałby się jakiś problem.
Ps. Czasem nie zwracamy uwagi na pewne rzeczy jeśli czytamy dłuższy tekst z dużą ilością informacji. Mimo że wiedziałem o czymś to nie wykorzystywałem tego, ale jak zobaczyłem to wyszczególnione to uznałem że to się przyda-mówię głównie o tej liście w ostatnim poście.
Pozdrawiam.

Offline 1709

  • Users
  • Guru
  • *****
  • Wiadomości: 2562
  • 1709
    • Zobacz profil
segregowanie plików według rozszerzeń
« Odpowiedź #5 dnia: 2015-04-16, 21:26:48 »
Koncepcja sama w sobie dobrai wykonalna moim zdaniem.

Co do skryptu Twojego wyzej,
Dziala takze ! :D

tylko
 "*.mp3") mv ~/Pobrane/$WORD ~/Muzyka ;;
zamien na
 *".mp3") mv ~/Pobrane/$WORD ~/Muzyka ;;

oraz
"*") echo "Brak definicji dla pliku:" $WORD
na
*) echo "Brak definicji dla pliku:" $WORD

i powinno byc ok.

 Trafilem na to wstawiajac do case takze inne rzeczy
np.
        case "$WORD" in
            *".mp3") echo "Jeeeeeeeeeeeeeeeeeeeeeeeeeeestm" ; mv $HOME/Desktop/$WORD $HOME/Music/ ;;
"Przydatne") echo " Jest ! ! ! ------------------------" ;;
            "*") echo "Brak definicji dla pliku:" $WORD
        esac
oraz wczesniej stworzylem plik cos.mp3 , oraz plik Przydatne.
Skrypt uruchamialem w ten sposob by widziec co robi
bash -x ./test.sh
I dziwilo mnie ze widzi plik ale nie reaguje
i tak przypakiem wpadlem na pomysl z ta gwiazdka i cudzyslowiem.

Case czytal gwiazdke w cudzyslowie jak znak gwiazdka i dlatego nie dzialalo,
po za nawiasem czyta to jako zmienna.
PS: Brak polskiej czcionki, nie jest to brak lenistwa, a jej brak w systemie i brak czasu na reczne poprawki.