bash - script che monitorizza directory
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- danix
- Staff
- Messaggi: 3287
- Iscritto il: ven 27 ott 2006, 19:32
- Nome Cognome: Danilo M.
- Slackware: 64 current
- Kernel: 5.4.43 x86_64
- Desktop: i3
- Località: Siderno (RC)
- Contatta:
bash - script che monitorizza directory
Ciao a tutti,
come si può fare in modo che uno script rimanga in esecuzione continua dal boot fino allo spegnimento e monitorizzi una determinata directory notificando i cambiamenti??
Ad esempio, ho una directory locale sul laptop in cui scarico archivi, documenti e una varietà di files diversi, e vorrei fare in modo che uno script controlli continuamente questa directory e appena trova un nuovo file lo sposti nella directory corretta, ~/docs se è un pdf, ~/musica se è un mp3 ecc...
La parte della selezione dei files la faccio con find, ma come faccio a far girare di continuo lo script?? uso cron??
Consigliatemi...
come si può fare in modo che uno script rimanga in esecuzione continua dal boot fino allo spegnimento e monitorizzi una determinata directory notificando i cambiamenti??
Ad esempio, ho una directory locale sul laptop in cui scarico archivi, documenti e una varietà di files diversi, e vorrei fare in modo che uno script controlli continuamente questa directory e appena trova un nuovo file lo sposti nella directory corretta, ~/docs se è un pdf, ~/musica se è un mp3 ecc...
La parte della selezione dei files la faccio con find, ma come faccio a far girare di continuo lo script?? uso cron??
Consigliatemi...
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: bash - script che monitorizza directory
Beh, puoi risolvere il problema a monte usando Kget e la sua gestione delle directory dei download per estensione, se si tratta di file che scarichi.
- danix
- Staff
- Messaggi: 3287
- Iscritto il: ven 27 ott 2006, 19:32
- Nome Cognome: Danilo M.
- Slackware: 64 current
- Kernel: 5.4.43 x86_64
- Desktop: i3
- Località: Siderno (RC)
- Contatta:
Re: bash - script che monitorizza directory
si, potrei ma scarico da vari programmi in quella directory, quindi la soluzione migliore è lo script credo...
- targzeta
- Iper Master
- Messaggi: 6631
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: bash - script che monitorizza directory
Ricordavo di aver letto di una chiamata di sistema che ti permette di mettere in wait un programma nell'attesa di un evento su un inode. Ho googlato un po' ed ho trovato quello che cercavo. Esiste un comando che dovrebbe fare al caso tuo:
http://linux.die.net/man/1/inotifywait
Non sono su linux e quindi non so se è presente su Slackware.
Fammi sapere,
Emanuele
Edit: Si, il pacchetto esiste. E' sotto la directory "a/" si cihama "inotify-tools-..."
http://linux.die.net/man/1/inotifywait
Non sono su linux e quindi non so se è presente su Slackware.
Fammi sapere,
Emanuele
Edit: Si, il pacchetto esiste. E' sotto la directory "a/" si cihama "inotify-tools-..."
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- ulisse89
- Packager
- Messaggi: 643
- Iscritto il: sab 17 gen 2009, 12:53
- Nome Cognome: Riccardo
- Slackware: 13.0
- Kernel: 2.6.29.6
- Desktop: Xfce
- Località: Bologna
Re: bash - script che monitorizza directory
E' una cosa che servirebbe molto anche a me. Se ti va, quando lo hai finito lo potresti postare, così lo uso pure io (che non lo saprei fare).
Grazie.
Grazie.
-
- Packager
- Messaggi: 1339
- Iscritto il: sab 27 mar 2004, 0:00
- Slackware: current
- Desktop: fluxbox.git
- Località: Collegno, but made in Friûl
- Contatta:
Re: bash - script che monitorizza directory
Secondo me, usi ls e fai fare il diff tra l'output corrente e il precedente. Il diff ti dà anche la path dei nuovi file, quindi puoi spostarli. Per eseguirlo a cadenza, cron va bene solo se non vuoi fare un demone, cosa che in questo caso forse è più opportuna.
- raffaele181188
- Packager
- Messaggi: 789
- Iscritto il: ven 7 set 2007, 21:40
- Nome Cognome: Raffaele
- Slackware: current
- Kernel: 2.6.29.6
- Desktop: KDE 4.3
- Distribuzione: Ubuntu
- Località: DearSkin (FG)
Re: bash - script che monitorizza directory
Per me invece è più comodo seguire il suggerimento di Spina. Tra l'altro ho notato che esistono pure i binding per Python quindi, volendo, ci si può proprio sfiziare senza nemmeno perderci tempo
- danix
- Staff
- Messaggi: 3287
- Iscritto il: ven 27 ott 2006, 19:32
- Nome Cognome: Danilo M.
- Slackware: 64 current
- Kernel: 5.4.43 x86_64
- Desktop: i3
- Località: Siderno (RC)
- Contatta:
Re: bash - script che monitorizza directory
io partendo dal suggerimento di spina ho tirato fuori questo:
funziona esattamente come volevo io e non è esoso in termini di risorse, basta lanciarlo una volta tramite rc.local e te ne dimentichi...
Codice: Seleziona tutto
#! /bin/bash
###############################################################################
# #
# inomover.sh - a script that monitors a directory and moves a list of known #
# files to some predefined directory according to their #
# extensions. #
# #
# Both destination dirs and extension lists can be modified. #
# #
# Default watched directory is provided as argument to the script. #
# #
# This script uses inotifywait(1) from inotify-tools, you can find the #
# source files at http://inotify-tools.sourceforge.net/ #
# Most Linux distributions comes with a precompiled version. #
# #
# #
# Author: danix < danix@danixland.net > #
# Many thanks to Emanuele Tomasi (aka spina) from the Slacky.eu #
# community for pointing me to this set of tools. ;-) #
# #
###############################################################################
check_dir=$1
video_dir="/opt/media/videos"
audio_dir="/opt/media/musica/temporary"
video_ext="mp4 flv avi divx mpg mpeg"
audio_ext="mp3"
while inotifywait -e create $check_dir ;do
for ext in $video_ext; do
find . -maxdepth 1 -name "*.$ext" -exec mv '{}' $video_dir \;
done
for ext in $audio_ext; do
find . -maxdepth 1 -name "*.$ext" -exec mv '{}' $audio_dir \;
done
done
Re: bash - script che monitorizza directory
grazie anche da parte mia.. proprio ciò che mi serve per una situazione pressochè identica
l'uomo ha bisogno di cibo rifugio e storie
- DanBadJar
- Linux 4.x
- Messaggi: 1027
- Iscritto il: ven 28 lug 2006, 19:27
- Nome Cognome: Daniele Malavasi
- Slackware: 13.1
- Kernel: 2.6.34.1
- Desktop: XFCE - Gnome
- Località: Bologna
- Contatta:
Re: bash - script che monitorizza directory
Non sapevo dell'esistenza di questo comando.
Ora il mio mailserver spara una email ad ogni tentativo di accesso fallito!
Grazie Spina
Ora il mio mailserver spara una email ad ogni tentativo di accesso fallito!
Grazie Spina
Re: bash - script che monitorizza directory
In alternativa, ma non è uno scritpt, si può scrivere una semplicissima applicazione o servizio Mono che usa la classe FileSystemWatcher, molto semplice da usare:
http://msdn.microsoft.com/en-us/library ... tcher.aspx
http://msdn.microsoft.com/en-us/library ... tcher.aspx
- joe
- Iper Master
- Messaggi: 3797
- Iscritto il: ven 27 apr 2007, 11:21
- Slackware: 15.0
- Kernel: 5.15.38
- Desktop: dwm
Re: bash - script che monitorizza directory
Si potrebbe anche fare qualcosa del genere forse:
/usr/mybin/dirmonitor.sh
Poi portresti fare uno script in stile "servizio" da tipo
/etc/rc.d/rc.dirmonitor.
Ho preso spunto da un mio script demoniaco per tenermi su la connessione.
È solo un'idea ovviamente da valutare testare verificare eccecc...
Mi sembrava giusto condividerlo. Vorrei evidenziare il comando "disown%1"
dopo il lancio in background dello script dirmonitor.sh è un trucco penso
buono per demonizzare un'applicazione.
Saluti!
/usr/mybin/dirmonitor.sh
Codice: Seleziona tutto
#!/bin/bash
dirmonitor()
{
controlla se c'è un file nuovo e spostalo
dove va messo
}
while [ 1 ]; do
sleep 3
dirmonitor
done
/etc/rc.d/rc.dirmonitor.
Codice: Seleziona tutto
#!/bin/bash
DIRMON=/usr/mybin/dirmonitor.sh
DRM_PID="pidof -x dirmonitor.sh"
LOGDIR=/var/log/dirmonitor
LOGERR=$LOGDIR/logverbose
[ ! -d $LOGDIR ] && mkidr -p $LOGDIR
dirmon_start() {
$($DRM_PID >/dev/null) && echo "DirMonIToR daemon already running: nothing to do, bye." && return
echo "Starting DirMonIToR . . . ."
$DIRMON 2>$LOGERR & disown %1
sleep 3
$($DRM_PID >/dev/null) && echo "Ok, daemon is running as $($DRM_PID) PID" || exit 1
}
dirmon_stop() {
! $($DRM_PID >/dev/null) && echo "DirMonIToR daemon not running" && return
echo "Stopping DirMonIToR daemon . . . ."
kill $($DRM_PID)
sleep 3
! $($DRM_PID >/dev/null) && echo "Ok, DirMonIToR daemon is stopped" || exit 1
}
È solo un'idea ovviamente da valutare testare verificare eccecc...
Mi sembrava giusto condividerlo. Vorrei evidenziare il comando "disown%1"
dopo il lancio in background dello script dirmonitor.sh è un trucco penso
buono per demonizzare un'applicazione.
Saluti!