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 :lol:

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 :wink:

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 :lol:
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
Insomma mi volete per forza far studiare bash... E quando lo trovo il tempo? :lol:

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? :oops: :oops: :lol: :lol: :lol:

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... :lol: :lol:

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