[+] Tworzenie katalogów na dysku synchronicznie z wpisami w MySQL
: 31 marca 2011, 14:03
Witam.
Generalnie chcę żeby wpisując dane w tabeli firmy na dysku pojawiał się folder z nazwą = firmy.nazwa i odpowiednimi uprawnieniami.
Proszę o pomoc bo męczę się już 2 dni, a nie bardzo wiem jak to zmajstrować a pewnie jest jakiś prosty sposób.
W pierwszej kolejności chciałem napisać trigger:Tylko, że po słowie SYSTEM zawszę dostaję syntax error.
Drugim pomysłem było napisanie skryptu do crona, który powiedzmy co minutę by synchronizował katalogi z wpisami. Jednak wydaje mi się, że to jest raczej niestosowne rozwiązanie i mocno będzie obciążać system zwłaszcza jeśli będzie sporo katalogów.
Tu skrypt, który niestety nie działa tak jakbym chciał.,,echo'' zwraca ładnie nazwy tylko bez polskich znaków, i jak wpiszę do pliku to też wszystko jest w porządku, za to polecenie mkdir kompletnie tworzy jakieś cuda. W Linuksie jeszcze jako tako:
Tylko te znaki zapytania. Jednak jeśli otworzę ten katalog jako udział samby to same krzaki się wyświetlają.
Dodane:
Dobrze, to sobie sam odpowiem.
Ten skrypt
Działa nieźle pod warunkiem, że w nazwach firm nie ma na końcu kropki. Jakoś Windows sobie z nią nie radzi przez co straciłem półtora dnia. Teraz tylko trzeba edytować plik log.txt żeby nie było na końcu kropek. I może jeszcze pousuwać puste linie, może jakiś log ładny się z tego zrobi.
Generalnie chcę żeby wpisując dane w tabeli firmy na dysku pojawiał się folder z nazwą = firmy.nazwa i odpowiednimi uprawnieniami.
Proszę o pomoc bo męczę się już 2 dni, a nie bardzo wiem jak to zmajstrować a pewnie jest jakiś prosty sposób.
W pierwszej kolejności chciałem napisać trigger:
Kod: Zaznacz cały
DELIMITER $$
USE `ansee`$$
CREATE
DEFINER=`ansee`@`localhost`
TRIGGER `ansee`.`folder`
AFTER INSERT ON `ansee`.`firmy`
FOR EACH ROW
BEGIN
SYSTEM cd /home/projekty_kopia;
SYSTEM mkdir NEW.nazwa;
END$$
Drugim pomysłem było napisanie skryptu do crona, który powiedzmy co minutę by synchronizował katalogi z wpisami. Jednak wydaje mi się, że to jest raczej niestosowne rozwiązanie i mocno będzie obciążać system zwłaszcza jeśli będzie sporo katalogów.
Tu skrypt, który niestety nie działa tak jakbym chciał.
Kod: Zaznacz cały
#!/bin/bash
max=`echo "SELECT MAX(idFirmy) AS '' FROM firmy;" | mysql -u ansee -pXXX ansee`
echo $max
for((i=0;i<=$max;i++))
do
dane=`echo "select nazwa as '' from firmy WHERE idFirmy=$i;" | mysql -u ansee -pXXX ansee`
mkdir "/home/projekty_kopia/${dane//\ /_}"
echo ${dane//\ /_}
done
Kod: Zaznacz cały
ls -l
Kod: Zaznacz cały
...
drwxr-xr-x 2 root root 4096 mar 30 14:14 ?WOJTECH_-_Wojciech_Paradiuk
drwxr-xr-x 2 root root 4096 mar 30 14:14 ?WSB_Parki_Wiatrowe_Sp._z_o.o.
Kod: Zaznacz cały
Wolumin w stacji U to testProjekty
Numer seryjny woluminu: 250C-8C57
Katalog: U:\
2011-03-30 13:51 <DIR> .
2011-03-29 12:27 <DIR> ..
2011-03-30 14:14 <DIR> _IDDED~A
2011-03-30 14:14 <DIR> _4SOS9~0
2011-03-30 14:14 <DIR> _TQK3X~S
2011-03-30 14:14 <DIR> _A5SGX~E
2011-03-30 14:14 <DIR> _DT929~L
2011-03-30 14:14 <DIR> _P9D0L~E
...
Dobrze, to sobie sam odpowiem.
Ten skrypt
Kod: Zaznacz cały
#!/bin/bash
max=`echo "SELECT MAX(idFirmy) AS '' FROM firmy;" | mysql -u ansee -pXXX ansee`
echo $max
rm /home/tomasz/skrypty/log.txt
for((i=0;i<=$max;i++))
do
dane=`echo "select nazwa as '' from firmy WHERE idFirmy=$i;" | mysql -u ansee -pXXX ansee`
#mkdir -p "/home/projekty_kopia/${dane//\ /_}"
#echo ${dane//\ /_}
echo ${dane//\ /_} >> /home/tomasz/skrypty/log.txt
done
echo Etap drugi.
while read LINE
do
echo ${LINE}
mkdir /home/projekty_kopia/${LINE}
done </home/tomasz/skrypty/log.txt