Pagina 1 di 1
Script per spostare directory
Inviato: sab 10 dic 2005, 12:10
da elettronicha
Vorrei fare uno script che confronti la data di creazione di una directory con la data attuale e, se la prima è più vecchia della seconda di almeno un mese, allora questa directory (es. /mnt/data/mp3/new/I_Giganti) viene spostata da un'altra parte (es. /mnt/data/mp3/burn/I_Giganti). Lo script deve agire solo sul percorso /mnt/data/mp3/ visto che voglio spostare solo le directory degli mp3. Ho individuato tre problemi:
- i nomi dei file possono contenere spazi? perché io in realtà do nomi del tipo "Franco Califano - 1978 - Io me 'mbriaco" alle directory
- finché si tratta dello stesso anno allora basta fare un controllo sul campo mese, altrimenti anche su quello anno
- non so programmare in bash....
... quindi se qualcuno sta seguendo il corso di Sistemi Operativi e vuole esercitarsi

Inviato: sab 10 dic 2005, 13:02
da gioco
Non ti aiuterò direttamente perchè di sta roba ne ho piene le balle (proprio per colpa di Sistemi Operativi), però con l'esperienza acquisita nell'ultimo mese

posso dirti:
1) dai un'occhiata a rsync che ti permette di tenere aggiornati alberi di directory
2) per i nomi che contengono spazi basta inserire i nomi delle variabili fra doppi apici
3)
http://steve-parker.org/sh/sh.shtml questo è il minimo

Re: Script per spostare directory
Inviato: sab 10 dic 2005, 13:20
da Paoletta
elettronicha ha scritto:
1 i nomi dei file possono contenere spazi? perché io in realtà do nomi del tipo "Franco Califano - 1978 - Io me 'mbriaco" alle directory
2 finché si tratta dello stesso anno allora basta fare un controllo sul campo mese, altrimenti anche su quello anno
3 non so programmare in bash....
... quindi se qualcuno sta seguendo il corso di Sistemi Operativi e vuole esercitarsi

1 sì;
2 certo, e se anno e mese coincidono devi fare il controllo sul giorno;
3
http://santini.dsi.unimi.it/dida/2002_linux/aitlsa.php
capitoli 6,7,8
Inviato: sab 10 dic 2005, 13:39
da elettronicha
Inviato: sab 10 dic 2005, 14:46
da Eurialo
io ne ho fatto uno simile tempo fa.. te l'ho riadattato... devi solo cambiare i 2 echo con i mv!
Codice: Seleziona tutto
#!/bin/bash
echo "Inserire la directory madre sulla quale effettuare la ricerca"
read directory
if [ -n "$directory" ]
then
echo "Comincio la scansione di $directory"
else
echo "Attenzione! Path nonvalido: $directory"
fi
annocorrente=`date +%Y`
mesecorrente=`date +%m`
mesecercato=`expr $mesecorrente - 1 | awk '{ printf("%.2i", $1) }'`
cd $directory
for i in *
do
tmp=`ls -tlF --full-time | grep / | awk '{ print $6 }' | cut -s -f -2 --delimiter=-`
anno=`echo $tmp | cut -s -f 1 --delimiter=-`
mese=`echo $tmp | cut -s -f 2 --delimiter=-`
if [ "$annocorrennte" = "$anno" ]
then
if [ "$mesecorrente" -lt "$mesecercato" ]
then
echo "Questa directory e' da spostare: $i"
fi
elif [ "$annocorrente" -gt "$anno" ]
then
echo "Questa directory e' da spostare: $i"
fi
done
echo "Scansione completata"
Inviato: ven 16 dic 2005, 16:28
da targzeta
Prova ad usare il comando find.
find DIR -type d -mtime +31 -print -daystart
scende tutto l'albero di directory la cui radice e' DIR e visualizza tutte e sole
le directory che hanno la data dell'ultima modifica risalente a piu' di 31 giorni
fa.
Quindi:
find DIR -type d -mtime +31 -print -daystart -exec mv '{}' NEW_DIR \;
sposta tutte le directory nell'albero di directory di radice DIR che hanno un
orario di ultima modifica che risale a piu' di 31 giorni fa in NEW_DIR.
NOTA:
Il comando mv sposta interi alberi di directory!!! Questo vuol dire che se hai un albero di directory cosi' formato:
DIR/ciao/mamm/guarda/come/mi/diverto
e sia la directory "guarda" che la directory "mi" non sono state modificate da
piu' di un mese, verra' spostata in NEW_DIR:
/guarda/come/mi/diverto
se non e' questo cio' che vuoi, allora devi aggiungere a find l'opzione -depth.
Il suo effetto nell'esempio precedente e di spostare in NEW_DIR:
/mi/diverto
poiche' con l'opzione -depth find processa prima il contenuto delle directory
e poi le directory stesse. Sostanzialmente, se non metti -depth find parte da
sinistra e va verso destra, con il -depth fa il contrario, parte da destra e va
a sinistra.
Spero di esserti stato di aiuto
Spina