Script per spostare directory

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

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.
Avatar utente
elettronicha
Master
Master
Messaggi: 1712
Iscritto il: mer apr 13, 2005 0:00
Località: Torino
Contatta:

Script per spostare directory

Messaggioda elettronicha » sab dic 10, 2005 12:10

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:

Avatar utente
gioco
Packager
Packager
Messaggi: 900
Iscritto il: dom giu 19, 2005 0:00
Slackware: last stable
Località: in the court of the Wesnoth king
Contatta:

Messaggioda gioco » sab dic 10, 2005 13:02

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:

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3971
Iscritto il: lun apr 25, 2005 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: Script per spostare directory

Messaggioda Paoletta » sab dic 10, 2005 13:20

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

Avatar utente
elettronicha
Master
Master
Messaggi: 1712
Iscritto il: mer apr 13, 2005 0:00
Località: Torino
Contatta:

Messaggioda elettronicha » sab dic 10, 2005 13:39

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:

Eurialo
Linux 1.x
Linux 1.x
Messaggi: 199
Iscritto il: ven dic 09, 2005 15:44
Località: Caltanissetta
Contatta:

Messaggioda Eurialo » sab dic 10, 2005 14:46

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"

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6505
Iscritto il: gio nov 03, 2005 14:05
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Messaggioda targzeta » ven dic 16, 2005 16:28

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