Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
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.
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
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
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
Insomma mi volete per forza far studiare bash... E quando lo trovo il tempo?
Daaaaaaaaaaiiiii Paole', almeno tu che sei donna, aiuta un uomo in difficoltà, te lo chiedo in ginocchio! Ti faccio il regalino di Natale! Non ti faccio pena?
Caro Babbo Natale,
E' vero, quest'anno ho fatto qualche volta il cattivo, però per il resto del tempo ho fatto il buono, qualche volta ho aiutato gli amici del forum di Slacky e giusto ieri in piazza San Carlo ho dato anche 1,10 € a una che aveva fame.
Mi aspetto lo scriptino sotto l'albero...
#!/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"
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.