#1 Le 27/07/2010, à 17: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, à 20: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, à 20: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, à 21: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, à 22:13)
Hors ligne
#5 Le 27/07/2010, à 22: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 27/07/2010, à 23: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, à 22: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, à 08: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