Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 27/07/2010, à 18:31

zebg87

Script bash pour transfert auto d'image

Bonjour à tous,

J'ai développé un script php qui permet de visionner sur une page web des images uploader par une camera ip sur un serveur dedier linux tournant sous ubuntu. Celles-ci sont uploader comme suit:

La camera1 upload dans le répertoire camera1/upload
La camera2 upload dans le répertoire camera2/upload
La camera3 upload dans le répertoire camera3/upload

J'aimerais créer un script bash qui permet de copier les fichier se trouvant dans dossier upload vers un autre
dossier portant la date du jour par exemple pour aujourd'hui (27 juillet 2010) le dossier aurait le nom: 20100727

On aurait donc:

Camera1/20100727 dossier contenant les fichiers transféré depuis upload à la date d'aujourd'hui
Camera2/20100727 dossier contenant les fichiers transféré depuis upload à la date d'aujourd'hui
Camera3/20100727 dossier contenant les fichiers transféré depuis upload à la date d'aujourd'hui

Demander au script de copier un fichier ne me pose pas de problème par contre j'ai quelques autres questions

1) Comment faire pour que le script tourne en permanence sur le système et que dès qu'un fichier est uploader celui-ci soit copié automatiquement.
2) dois-je lancer un script par caméra dans chaque dossier upload?

Merci d'avance pour votre aide

Hors ligne

#2 Le 27/07/2010, à 21:12

wido

Re : Script bash pour transfert auto d'image

Bonjour,
1/ script en tache de fond:

sh /tondossier/tonscript.sh &

utilise rsync et un sleep, comme cela au bout d'une minute, le script lancera la commande rsync, si il y a un fichier de nouveau il le copiera sinon il ne copiera rien et il passera à l'autre dossier.
2/ expliqué précédemment.

Hors ligne

#3 Le 27/07/2010, à 21:19

zebg87

Re : Script bash pour transfert auto d'image

Bonsoir avant ta réponse j'ai écris ceci:

#!/bin/bash

while true
do
	liste_fichiers=`ls`

	directory=`date +%Y%m%d`

	mkdir $directory

	for fichier in $liste_fichiers
	do 
		echo "Le script continue à tourner et copie vers: $directory"
		mv  *.jpg "$directory/" 
	done
	sleep 5
done

Mais si je comprend bien il faut pas que j'utilise le script que j'ai ecris mais juste un script avec la commande rsync dedans?

Merci d'avance

Hors ligne

#4 Le 27/07/2010, à 22:14

wido

Re : Script bash pour transfert auto d'image

Vérifie si ça fonctionne:

#!/bin/bash
TIME=5 #5 secondes

# NE PAS TOUCHER #
DATE=`stat -c %x "$ligne" | awk '{print $1}' | sed "s/-//g"`
DOSSIER=`dirname "$ligne"`
IMAGE=`basename "$ligne"`

# Verification des dossiers
[ -d "/camera1/upload" ] || mkdir -p "/camera1/upload"
[ -d "/camera2/upload" ] || mkdir -p "/camera2/upload"
[ -d "/camera3/upload" ] || mkdir -p "/camera3/upload"

# lister les images
LOG() {
find "/camera1/upload" -type f -name '*.jpg' >> "/camera1/upload/camera1.log"
find "/camera2/upload" -type f -name '*.jpg' >> "/camera1/upload/camera1.log"
find "/camera3/upload" -type f -name '*.jpg' >> "/camera1/upload/camera1.log"
cat "/camera1/upload/camera1.log" | sort | uniq > "/camera1/upload/camera.log"
}

[ -f "/camera1/upload/camera.log" ] || LOG

# Deplacement des images vers leur dossier
while read ligne
do
    [ -d "/$DOSSIER/$DATE" ] || mkdir -p "/$DOSSIER/$DATE"

        echo "Le script continue à tourner et copie vers: /$DOSSIER/$DATE"
        mv "$ligne" "/$DOSSIER/$DATE"
        sleep $TIME
        rm "/camera1/upload/camera.log"

    done < "/camera1/upload/camera.log"

Dernière modification par wido (Le 28/07/2010, à 23:13)

Hors ligne

#5 Le 27/07/2010, à 23:05

zebg87

Re : Script bash pour transfert auto d'image

Merci pour le code!!!

J'ai par contre un problème ici: stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]

Hors ligne

#6 Le 28/07/2010, à 00:52

twocats

Re : Script bash pour transfert auto d'image

TIME=5 #5 secondes

---

$TIME

???


La réponse est 42

Hors ligne

#7 Le 28/07/2010, à 23:15

wido

Re : Script bash pour transfert auto d'image

remplace

DATE=`stat -c %x "$ligne" | awk '{print $1}' | sed "s/-//g"`

par

DATE=`stat -f %x "$ligne" | awk '{print $1}' | sed "s/-//g"`

Hors ligne

#8 Le 29/07/2010, à 09:54

zebg87

Re : Script bash pour transfert auto d'image

J'ai écris cela: #!/bin/bash

while true
do

    for p in $(ls -d sites/interface/*/camera*/)
         do
        date=`date +%Y%m%d`
        dir="$p$date"
        mkdir "$dir"
        for q in $(ls $p*.jpg)
            do
            mv "$q" $dir
            echo "fichier $q déplacé"
        done
        echo " "
    done
sleep 5
done

   


Ca marche très bien par contre je pense utilisé cron pour planifier l'utilisation plutôt que d'utiliser une boucle infinie.

Hors ligne