Nowe posty

Autor Wątek: Segregacja plików  (Przeczytany 3539 razy)

  • Gość
Segregacja plików
« dnia: 2010-12-13, 15:32:21 »
Witam!

Pracuję - a dokładnie uczę się systemu Linux (suse mówiąc ściślej, wiec używam języka powłoku Bash). Przeszperałem forum, i nie znalazłem odpowiedzi na moje pytanie, które prawdopodobnie jest trywialne - ale cóż , dla laika to magia!

W tym miejscu zaznaczam ze zapoznałem się z manual'ami, ale mimo to nie umiem tego rozpracować :(

Mianowicie, chciałbym napisać skrypt , który posegregował by mi moje pliki ( w tym przypadku moją muzykę ) w taki sposób aby:

*z danego folderu i jego podfolderów, poprzenosił:
   -wszystkie mp3'jki zaczynające się na 'a' do folderu ~/music/a/
   -wszystkie na literę b do folderu ~/music/b/
 

mówiąc krótko - segregując tak aby wszystkie pliki któych nazwa zaczyna sie na X powędrowały do katalogu (który musi być dopiero stworzony) ~/posegregowane dane/x/


Zaznaczam, ze jestem zielony w te klocki i >> proszę o pomoc <<, jakby taki skrypt wyglądał ?

Z góry dziękuje za pomoc.
Aw0kado.

goobar

  • Gość
Segregacja plików
« Odpowiedź #1 dnia: 2010-12-13, 21:24:54 »
Nastepujacy skrypt wykonuje to zadanie:

#!/bin/bash
DIRECTORY=$HOME/music;
mkdir -p $DIRECTORY;
for i in *.mp3
do
        FIRSTCHAR=`echo $i|cut -c 1`;
        mkdir -p $DIRECTORY/$FIRSTCHAR;
        mv -v $i $DIRECTORY/$FIRSTCHAR;
done
Duzymi literami zwyczajowo oznacza sie zmienne srodowiskowe. Na poczatek skrypt tworzy zmienna DIRECTORY, ktora trzyma sciezke do katalogu, w ktorym nalezy umiescic posortowane dane. Polecenie mkdir z przelacznikiem -p tworzy dany katalog, lecz jesli istnieje on, to nie zwraca zadnego bledu po prostu ignorujac polecenie. Nastepnym krokiem jest wykonanie petli po wszystkich plikach konczaccych sie na mp3 w biezacym katalogu. Dla kazdego z tych plikow wybieramy jego pierwszy znak dzieki poleceniu cut -c 1, a nastepnie zapisujemy do zmiennej FIRSTCHAR. Pozniej skrypt tworzy odpowiedni podkatalog w katalogu $DIRECTORY, po czym przenosi znaleziony plik do tego katalogu.

  • Gość
Segregacja plików
« Odpowiedź #2 dnia: 2010-12-13, 21:53:54 »
Dziękuje za pomoc (zarówno kod jak i wytłumaczenie!). Zabieram się za analizowanie kodu, żebym następnym razem poradził sobie sam :)!

- pozdrawiam
aw0kado

  • Gość
Segregacja plików
« Odpowiedź #3 dnia: 2011-01-13, 15:09:14 »
Proszę jednak o pomoc. Próbowałem uruchomić skrypt, który Goobar mi napisał, jednak podczas pisania dostaje błąd.

przesyłam screen błędu z konsoli :

http://img545.imageshack.us/i/helpj.png/

Skrypt stworzył odpowiednei foldery :

http://img406.imageshack.us/i/41454048.png/

dla plików:

http://img221.imageshack.us/i/88248672.png/

Ale dostaję taki błąd i nie wiem, jak sobie z nim poradzic. Ponownie proszę kogoś o pomoc i z góry dziękuję za poświęcony czas.

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 2838
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Segregacja plików
« Odpowiedź #4 dnia: 2011-01-13, 21:05:45 »
#!/bin/bash
DIRECTORY="$HOME/music"
mkdir -p "$DIRECTORY"
for i in *.mp3
do
        # Można,
        # FIRSTCHAR=`echo "$i"|cut -c 1`
        # ale
        FIRSTCHAR="${i:0:1}"
        # jest bardziej eleganckie i nie woła zewnętrznego programu.
        mkdir -p "$DIRECTORY/$FIRSTCHAR"
        mv -v "$i" "$DIRECTORY/$FIRSTCHAR"
done
Proszę zwrócić uwagę na swawolnie dorzucone cudzysłowy. Nazwy plików ze spacjami to zmora nieostrożnych skrypciarzy.

W powyższym skrypcie niektóre są nadmiarowe, ale praktyka uczy, że lepiej dać jeden za dużo niż jeden za mało.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

  • Gość
Segregacja plików
« Odpowiedź #5 dnia: 2011-01-14, 14:39:09 »
Rzeczywiście, przez spacje, skrypt źle odczytywał nazwę plików a cudzysłowia załatwiają sprawę. Następnym razem, postaram się uniknąć tego problemu samodzielnie.

Dziękuję ślicznie za poświęcony czas i pozdrawiam

-aw0kado :)