Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[SCRIPT RUBY] Ranger son home facilement !
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Fri Sep 15, 2006 3:10 pm    Post subject: [SCRIPT RUBY] Ranger son home facilement ! Reply with quote

Salut,


Ce script va ranger vôtre home très rapidement si vous avez un certains types de fichiers ... Il va créer un certains nombres de répertoires par défaut en fonction de leurs existences pour y mettre les fichiers et si un répertoire reste vide , il vous sera demandé de l'effacer ...



I.) Les répertoires crées et le type d'extension pris en charge

    * Documents : .pdf, .txt, .doc
    * Images : .png, .jpg, .jpeg, .gif, .bmp, .svg, .tif, .tiff
    * Musiques : .mp3, .wav, .asx, .ogg, .wma
    * Archives: .tar, .tar.gz, .tgz, .tar.bz2, .rar, .zip, .Z, .ace
    * Videos : .avi, .mpeg, .mka, .mkv, .mpg, .rm, .rmvb, .wmv, .vob
    * Paquets : .deb, .rpm
    * Java : .java, .class
    * Cpp : .c, .cpp, .h, .hpp, .cxx
    * HTML : .htm, .html, .css
    * PHP : .php, .php3, .php4, .php5
    * Scripts : .sh, .rb, .py, .pl



II.) Le Code


Code:

#!/usr/bin/ruby   -w





### Distributed under the terms of the GNU General Public License v2
#
### range comes with ABSOLUTELY NO WARRANTY !
#
### Inspirez du script de GarulfoLinux qui m'a fait un clin d'oeil (pour me donner du taff !) ...
#
### Author : Man in the Hill .





require  'getoptlong'
require  'fileutils'
include   FileUtils



class  Ordre

   
   def  test(dir)
           
      test = FileTest::directory?(dir)
           
           
      if     test == true
         puts "Le répertoire #{dir} ... EXIST ... [ OK ]\n\n"
           
      else
         puts "Le répertoire #{dir} ... N'EXISTE PAS !\n\n"
         puts "Création du répertoire #{dir} ...[ OK ]\n\n"
         Dir::mkdir("#{dir}", 0777)
               
      end   
         
   end     
   

   def   mouv()
     
      tab = %x(ls).split
     
      tab.each { |file|
         
         base = File::basename(file)
         ext = File::extname(file)
         
         case ext
           
            when ".pdf", ".txt", ".doc"
            mv("#{base}", "Documents")
           
            when ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".svg", ".tif", ".tiff"
            mv("#{base}", "Images")
           
            when ".mp3", ".wav", ".asx", ".ogg", ".wma"
            mv("#{base}", "Musiques")
           
            when ".tar", ".gz", ".tgz", ".bz2", ".rar", ".zip", ".Z", ".ace"
            mv("#{base}",  "Archives")
         
            when ".avi", ".mpeg", ".mka", ".mkv", ".mpg", ".rm", ".rmvb",  ".wmv", ".vob"
            mv("#{base}", "Videos")
           
            when ".deb", ".rpm"
            mv("#{base}", "Paquets")
           
            when ".java", ".class"
            mv("#{base}", "Java")
           
            when  ".c", ".cpp", ".h", ".hpp", ".cxx"
            mv("#{base}", "Cpp")
           
            when ".htm", ".html", ".css"
            mv("#{base}", "HTML")
           
            when ".php", ".php3", ".php4", ".php5"
            mv("#{base}", "PHP")
           
            when ".sh", ".py", ".rb", ".pl"
            mv("#{base}", "Scripts")
     
         end
         }
   end   
     

   def  dossiervide(z)
     
     
      vide = %x(ls "#{z}")
     
      if  vide == ""
         puts "\n** Le répertoire #{z} est vide ! Voulez-vous l'effacer ?[Y/n]\n\n"
         choice = $stdin::gets.chomp
         
         case  choice.downcase
         
            when  "y", "yes"
            rm_rf("#{z}")
            puts "\nLe répertoire #{z} a été effacé ... [ OK ]\n\n"
           
            when "n", "no", "non"
            path = Dir::pwd
            puts "\nLe répertoire #{z} est dans #{path} ! Enjoy !\n\n"
           
            else
            puts "\nUne erreur c'est produite ! Afficher l'aide avec --help or -h !\n\n"
         
         end
     
      end
   end

   
   
   

   
end     
     
     
     
     
                                                                             
                                 
                                 # RANGE #
     
     
     
     
      # Création de l'objet "r" ...
      r = Ordre::new()
     
      # What Time is it ?
      t= Time.now.asctime
      puts "\n#{t}\n\n"
     
      # Option d'aide  ...
      opts = GetoptLong::new(['--help', '-h', GetoptLong::NO_ARGUMENT])
     
      # Traitement de l'option "help" ...
      opts.each do |opt, arg|
     
   case  opt
     
      when  "--help", "-h"
      puts "\n== Synopsis ==\n"
      puts "\nRange vos fichiers ..."
      puts "\n== Usage ==\n"
      puts "\nVous vous placez dans le répertoire ou se trouve tous vos fichiers à ranger ...\n"
      puts "\nLancer le script ...\n"
      puts "\nSi vous n'avez pas de fichiers dans une des catégories,\n"
      puts "\nle script vous demandera de supprimer le répertoire créé si il est vide !\n"
      puts "\nEx: Le script créer tous les répertoires par défaut et si vous n'avez pas de fichiers .java, .class,\n"
      puts "le répertoire Java créé sera vide alors il vous demandera de supprimer ce répertoire !\n"
      puts "\nSi vous constatez un bug faite moi signe !..\n"
      puts "\n== Fin ==\n\n"
      exit
      end
   end
     
      # Appelle de la méthode "test" ...
      r::test("Documents")
      r::test("Images")
      r::test("Musiques")
      r::test("Archives")
      r::test("Videos")
      r::test("Paquets")
      r::test("Java")
      r::test("Cpp")
      r::test("HTML")
      r::test("PHP")
      r::test("Scripts")
     
      # Appelle de la méthode "mouv" ...
      r::mouv()
     
      # tester si un répertoire est vide ...
      r::dossiervide("Documents")
      r::dossiervide("Images")
      r::dossiervide("Musiques")
      r::dossiervide("Archives")
      r::dossiervide("Videos")
      r::dossiervide("Paquets")
      r::dossiervide("Java")
      r::dossiervide("Cpp")
      r::dossiervide("HTML")
      r::dossiervide("PHP")
      r::dossiervide("Scripts")

     
exit


Si vous avez d'autres extensions à proposer !


Note : Si vous nommez le script avec une extension .rb et qu'il est dans le même répertoire de rangement, il va se retrouver dans le répertoire Scripts !... Vous lancez le script ainsi après l'avoir rendu exécutable:
Code:
chmod +x nom_du_srcipt    ** pour le rendre exécutable !

Code:
ruby  nom_du_sript

ou
Code:
./nom_du_script

Une petite aide est inclus avec l'option --help ou -h .
J'ai rajouté le cas ou vous n'aurez pas de fichiers dans une des catégories, le script vous demandera de supprimer le répertoire crée si il est vide ...
Par ex : Si vous n'avez pas de fichier .java , .class et que le répertoire Java qui serra quand même créé (s'il n'existe pas , bien sûr) au lancement du script reste est vide, vous aurez la possibilité de le supprimer !

Effacez si vous êtes sûr qu'il n'y a pas de fichiers cachés dans ce répertoire car le script ne va pas les détecter !

Assurez-vous de ne pas avoir des fichiers avec des espaces dans les noms !

Enjoy !


@ +
_________________
Get Up and Go !


Last edited by man in the hill on Sat Sep 16, 2006 11:31 am; edited 2 times in total
Back to top
View user's profile Send private message
loopx
Advocate
Advocate


Joined: 01 Apr 2005
Posts: 2787
Location: Belgium / Liège

PostPosted: Sat Sep 16, 2006 1:10 am    Post subject: Reply with quote

Yep, pour les extentions:

video: mpg rm rmvb wmv vob?
archive: ace
music: ogg wma
cpp: cxx
image: tif (tiff?)
_________________
Mon MediaWiki perso : http://pix-mania.dyndns.org
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Sat Sep 16, 2006 2:04 am    Post subject: Reply with quote

loopx wrote:
Yep, pour les extentions:

video: mpg rm rmvb wmv vob?
archive: ace
music: ogg wma
cpp: cxx
image: tif (tiff?)



Merci :wink: 8) !
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Temet
Advocate
Advocate


Joined: 14 Mar 2006
Posts: 2579
Location: 92

PostPosted: Sat Sep 16, 2006 6:21 am    Post subject: Reply with quote

"nrj" c'est pas plutot les iso made in Nero ça ?
Back to top
View user's profile Send private message
cylgalad
Veteran
Veteran


Joined: 18 Apr 2003
Posts: 1327
Location: France

PostPosted: Sat Sep 16, 2006 10:52 am    Post subject: Reply with quote

Non, c'est .nrg...
Sinon un cerveau c'est très pratique pour faire du rangement...
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Sat Sep 16, 2006 11:29 am    Post subject: Reply with quote

Temet wrote:
"nrj" c'est pas plutot les iso made in Nero ça ?


C'est une radio ça, non ? je déconne :lol: , franchement je n'ai pas pris la peine de vérifier :oops: si c'est un iso ou une image ... mais je crois tu as raison cela doit être un iso ... Je vais l'enlever ! Merci !

cylgalad wrote:
Non, c'est .nrg...
Sinon un cerveau c'est très pratique pour faire du rangement...


Les langages informatiques c'est fait pour faciliter la vie non ? et c'est le résultat d'un cerveau ! C'est le principe même de l'informatique qui est de réaliser des tâches ! je pense que tu es bien content quand tu utilises ce genre de commande (ou les regex aussi ):
Code:
mv  *.tar.bz2     /répertoire

bash aurait pu être codé pour ne pas reconnaître le caractère * et tu serais obligé de bouger chaque fichiers avec son nom complet ...


En tout cas, merci à vous, c'est du pur libre ou vous pouvez critiquer, améliorer ou ne pas l'utiliser, of course ! :D ....
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Temet
Advocate
Advocate


Joined: 14 Mar 2006
Posts: 2579
Location: 92

PostPosted: Sat Sep 16, 2006 8:40 pm    Post subject: Reply with quote

Bah, perso j'apprécie de partager et même si ce script n'est pas utile pour mon usage personnel, jamais je n'aurais l'idée de poster pour dire "Sinon un cerveau c'est très pratique pour faire du rangement..." o_O'.

Si ce script est utilisé par certaines personnes, alors tant mieux et merci man in the hill !;)
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Sat Sep 16, 2006 9:18 pm    Post subject: Reply with quote

Temet wrote:
Bah, perso j'apprécie de partager et même si ce script n'est pas utile pour mon usage personnel, jamais je n'aurais l'idée de poster pour dire "Sinon un cerveau c'est très pratique pour faire du rangement..." o_O'.

Si ce script est utilisé par certaines personnes, alors tant mieux et merci man in the hill !;)


Merci Temet :wink: !


@+
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Sleeper
l33t
l33t


Joined: 12 Nov 2002
Posts: 667

PostPosted: Sun Sep 17, 2006 12:24 pm    Post subject: Reply with quote

Sympa .. J'aurais juste externalisé les correspondances extensions -> repertoire de destination (pour pouvoir les éditer plus facilement par exemple ) dans un fichier YAML par exemple:

Code:

---
- extensions:
    - pdf
    - doc
  directory: /foo

- extensions:
    - c
    - h
  directory: /sources


Ton code a ensuite juste besoin de le relire:

Code:

require 'yaml'

rules = YAML.load_file( 'rules.yml' )


Tu te retrouves alors avec un tableau de hash, chaque hash ayant une cle extensions et une cle directory. Tu peux ensuite chercher le hash associe à une certaine extension:
Code:

rule = rules.find do |r|
  r['extensions'].includes?( ext )
end

mv base, r['directory'] unless r.nil?



Pour aller plus vite tu peux aussi créer un hash intermédiare, dont les clés sont les extensions et les valeurs le répertoires de destination ;)

Mes .2 cents
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Sun Sep 17, 2006 2:31 pm    Post subject: Reply with quote

Sleeper wrote:
Pour aller plus vite tu peux aussi créer un hash intermédiare, dont les clés sont les extensions et les valeurs le répertoires de destination ;)

Mes .2 cents


Pas mal tout çà :D , je vais re-travailler le code ... j'apprends, j'apprends, c'est kool ( Cela fait un petit mois que j'apprends ruby ...)


Merci,


@ +
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Sleeper
l33t
l33t


Joined: 12 Nov 2002
Posts: 667

PostPosted: Sun Sep 17, 2006 2:49 pm    Post subject: Reply with quote

man in the hill wrote:

Pas mal tout çà :D , je vais re-travailler le code ... j'apprends, j'apprends, c'est kool ( Cela fait un petit mois que j'apprends ruby ...)


Tiens, une autre idée qui me vient: faire un petit DSL (Domain Specific Language). Du coup ton fichier de configuration serait un fichier ruby qui ressemblerait à:

Code:

move_files_with_extensions ['pdf','doc'], :to => "/foo/docs"
move_files_with_extensions ['c','h'], :to => "/foo/sources"


Encore plus sympa non ?
Back to top
View user's profile Send private message
man in the hill
Veteran
Veteran


Joined: 15 Dec 2005
Posts: 1552
Location: Madinina

PostPosted: Sun Sep 17, 2006 3:07 pm    Post subject: Reply with quote

Sleeper wrote:
Tiens, une autre idée qui me vient: faire un petit DSL (Domain Specific Language). Du coup ton fichier de configuration serait un fichier ruby qui ressemblerait à:

Code:

move_files_with_extensions ['pdf','doc'], :to => "/foo/docs"
move_files_with_extensions ['c','h'], :to => "/foo/sources"


Encore plus sympa non ?


ça fuzze les idées, c'est kool :lol:, je vais tester tout ça et si j'ai un soucis, je ferais appelle à toi :wink: . ... Le DSL, je connaissais pas ...

_-_ Pendant que j'y suis et que tu y es :D , tu m'as l'air bien calé en ruby !

j'ai un petit soucis sur le script que je bosse en ce moment qui me casse bien les pieds, si tu as du temps de libre http://www.forum.moteurprog.com/Message.php?PAGE=3&ID_sujet=23291 tu peux remonter le fil de la discuss ...


@ +

[EDIT] Après une petite réflexion , Ce que je te propose c'est de modifier le script comme tu le sens car comme c'est un script que j'ai fais rapidement ... et on pourrait sûrement rajouter d'autres fonctionnalités ! et tu posts le résultat dans ce sous forum ...Sinon je vais l'améliorer mais pas tout de suite car ce script est juste une réaction instantané à la vu d'un script d'un pote donc tu peux faire pareil :wink: , il n'y a pas de soucis :!: ! En tous cas il est fonctionnel à 100% dans son job ! Merci 8) ! @ + [/EDIT]
_________________
Get Up and Go !
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum