Script Bash de rangement

Script Bash de rangement - Linux et OS Alternatifs

Marsh Posté le 11-01-2005 à 16:04:12    

Bonjour,
 Je cherche a faire un script Bash me permettant d'organiser un repertoire.
 Il y a dans ce répertoire une quantite (20Go) de fichiers que je souhaite ranger dans des repertoires correspondant a la date de creation des fichiers, bien entendu les repertoires "date" ne sont pas crées.
A vrai dire je bloque un peu, voici mes débuts :
 
for x in ` ls -l | tr -s " " | cut -d " " -f6,8` ; do
   // nom dossier cible et fichier
   echo $x;
done
 
merci pour votre coup de main ...
analogx

Reply

Marsh Posté le 11-01-2005 à 16:04:12   

Reply

Marsh Posté le 11-01-2005 à 16:12:12    

à tester :

Code :
  1. for x in ` ls -l | tr -s " " | cut -d " " -f6,8` ; do
  2.    // nom dossier cible et fichier
  3.    mkdir "$x"
  4. // on récupère le champ contenant le ou les noms des fichiers modifés à cette date
  5.    for f in `ls -l | tr -s " " | grep "$x"|cut -d " " -f9`; do
  6.    mv $f "./$x/"
  7.     done
  8. done


Message édité par Mjules le 11-01-2005 à 16:16:54

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 11-01-2005 à 16:15:57    

Mjules a écrit :

pour créer le dossier :

for x in ` ls -l | tr -s " " | cut -d " " -f6,8` ; do
   // nom dossier cible et fichier
   mkdir "$x"
done



 
 
jusque la ok mais c apres que je bloque ....

Reply

Marsh Posté le 11-01-2005 à 16:16:19    

j'ai édité


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 11-01-2005 à 16:17:12    

ça serait peut-être plus élégant et sur avec un find


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 11-01-2005 à 16:18:51    

euh ouais, find c'est mieux quand même :D


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 11-01-2005 à 16:21:07    

sur, mais j'ai la polio sur le regexp et en plus j'ai pas les yeux en face des trous. J'ai pas trouvé l'option qui va bien pour chercher un fichier modifié à une date donnée.


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 11-01-2005 à 16:25:14    

Mjules a écrit :

sur, mais j'ai la polio sur le regexp et en plus j'ai pas les yeux en face des trous. J'ai pas trouvé l'option qui va bien pour chercher un fichier modifié à une date donnée.


 
On m'a aussi aiguille vers find mais comme toi je ne sais pas comme trouve l'option qui va bien pour cherche un fichier modifié à une date donné ....
merci qd meme pour toutes ces infos :)
 
analogx

Reply

Marsh Posté le 11-01-2005 à 16:30:46    

-mtime :)


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 11-01-2005 à 16:32:44    

-mtime n    Fichier dont les données ont été modifiées il y a n*24 heures.
 
il faut calculer le temps qui s'est écoulé depuis la date récupérée par ls :/


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 11-01-2005 à 16:32:44   

Reply

Marsh Posté le 11-01-2005 à 16:35:30    

Mjules a écrit :

-mtime n    Fichier dont les données ont été modifiées il y a n*24 heures.
 
il faut calculer le temps qui s'est écoulé depuis la date récupérée par ls :/


 
en lisant : http://lea-linux.org/trucs/item.391.html
 
j'ai fais ceci :
 
#!/bin/bash
 
for i in * ; do
 varmonth=`ls -l $i | tr -s " " | cut -d " " -f6`
 mkdir $varmonth
 cp $i ./$varmonth
done

Reply

Marsh Posté le 11-01-2005 à 16:50:39    

effectivement, c'est beaucoup + simple :)


Message édité par Mjules le 11-01-2005 à 16:50:47

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 11-01-2005 à 17:02:56    

analogx a écrit :

en lisant : http://lea-linux.org/trucs/item.391.html
 
j'ai fais ceci :
 
#!/bin/bash
 
for i in * ; do
 varmonth=`ls -l $i | tr -s " " | cut -d " " -f6`
 mkdir $varmonth
 cp $i ./$varmonth
done


 
 
J'espère pour toi que tu n'as pas de données importantes dans ton dossier, et que tu ne comptes pas réutiliser le script.
Parce que là tu va avoir des problèmes si tu as des fichiers avec des espaces dans leur nom. Sur un gros dossier ça va cracher des erreurs par centaines à cause du mkdir, et tu ne verras pas les vrais erreurs. Et si pour une raison ou une autre le dossier n'est pas créé (fichier qui porte le nom d'un mois?) ça ne va pas être beau à voir [:petrus75]  
Mais si c'est pour utiliser uen seule fois sur un seul dossier, ça peut suffir :)

Reply

Marsh Posté le 11-01-2005 à 17:09:18    

apres correction :
 
#!/bin/bash
 
for i in `find . -type f` ; do
 varmonth=`ls -l $i | tr -s " " | cut -d " " -f6`
 if [ ! -d $varmonth ]; then
        mkdir $varmonth
 fi
cp $i ./$varmonth
done
 
 
pour infos tous les fichiers dans le repertoire sont de la forme :
1082998074.21828_0.bastion
 
aussi pour infos, un "du -sh" dans ce meme repertoire retourne 20Go.
A vrai dire c'est ce dernier point qui m'inquiete un peu ...
 
merci encore pour vos aides et points de vue ;)
 
analogx

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed