Forums

Skip to content

Advanced search
  • Quick links
    • Unanswered topics
    • Active topics
    • Search
  • FAQ
  • Login
  • Register
  • Board index International Gentoo Users French
  • Search

[SCRIPT RUBY] Ranger son home facilement !

Forum dédié aux utilisateurs francophones de Gentoo. Retrouvez aussi Gentoo Linux en français sur le wiki!

Moderators: El_Goretto, xaviermiller

Post Reply
  • Print view
Advanced search
12 posts • Page 1 of 1
Author
Message
man in the hill
Veteran
Veteran
User avatar
Posts: 1552
Joined: Thu Dec 15, 2005 6:25 pm
Location: Madinina

[SCRIPT RUBY] Ranger son home facilement !

  • Quote

Post by man in the hill » Fri Sep 15, 2006 3:10 pm

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: Select all

#!/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: Select all

chmod +x nom_du_srcipt    ** pour le rendre exécutable !

Code: Select all

ruby  nom_du_sript
ou

Code: Select all

./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 !


@ +
Last edited by man in the hill on Sat Sep 16, 2006 11:31 am, edited 2 times in total.
Get Up and Go !
Top
loopx
Advocate
Advocate
User avatar
Posts: 2787
Joined: Fri Apr 01, 2005 7:42 pm
Location: Belgium / Liège
Contact:
Contact loopx
Website

  • Quote

Post by loopx » Sat Sep 16, 2006 1:10 am

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
Top
man in the hill
Veteran
Veteran
User avatar
Posts: 1552
Joined: Thu Dec 15, 2005 6:25 pm
Location: Madinina

  • Quote

Post by man in the hill » Sat Sep 16, 2006 2:04 am

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 !
Top
Temet
Advocate
Advocate
User avatar
Posts: 2586
Joined: Tue Mar 14, 2006 9:36 am
Location: 92
Contact:
Contact Temet
Website

  • Quote

Post by Temet » Sat Sep 16, 2006 6:21 am

"nrj" c'est pas plutot les iso made in Nero ça ?
Top
cylgalad
Veteran
Veteran
Posts: 1327
Joined: Fri Apr 18, 2003 9:36 am
Location: France

  • Quote

Post by cylgalad » Sat Sep 16, 2006 10:52 am

Non, c'est .nrg...
Sinon un cerveau c'est très pratique pour faire du rangement...
Make love not war !
Top
man in the hill
Veteran
Veteran
User avatar
Posts: 1552
Joined: Thu Dec 15, 2005 6:25 pm
Location: Madinina

  • Quote

Post by man in the hill » Sat Sep 16, 2006 11:29 am

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: Select all

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 !
Top
Temet
Advocate
Advocate
User avatar
Posts: 2586
Joined: Tue Mar 14, 2006 9:36 am
Location: 92
Contact:
Contact Temet
Website

  • Quote

Post by Temet » Sat Sep 16, 2006 8:40 pm

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 !;)
Top
man in the hill
Veteran
Veteran
User avatar
Posts: 1552
Joined: Thu Dec 15, 2005 6:25 pm
Location: Madinina

  • Quote

Post by man in the hill » Sat Sep 16, 2006 9:18 pm

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 !
Top
Sleeper
l33t
l33t
User avatar
Posts: 667
Joined: Tue Nov 12, 2002 3:40 pm
Contact:
Contact Sleeper
Website

  • Quote

Post by Sleeper » Sun Sep 17, 2006 12:24 pm

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: Select all

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

- extensions:
    - c
    - h
  directory: /sources
Ton code a ensuite juste besoin de le relire:

Code: Select all

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: Select all

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
Top
man in the hill
Veteran
Veteran
User avatar
Posts: 1552
Joined: Thu Dec 15, 2005 6:25 pm
Location: Madinina

  • Quote

Post by man in the hill » Sun Sep 17, 2006 2:31 pm

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 !
Top
Sleeper
l33t
l33t
User avatar
Posts: 667
Joined: Tue Nov 12, 2002 3:40 pm
Contact:
Contact Sleeper
Website

  • Quote

Post by Sleeper » Sun Sep 17, 2006 2:49 pm

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: Select all

move_files_with_extensions ['pdf','doc'], :to => "/foo/docs"
move_files_with_extensions ['c','h'], :to => "/foo/sources"
Encore plus sympa non ?
Top
man in the hill
Veteran
Veteran
User avatar
Posts: 1552
Joined: Thu Dec 15, 2005 6:25 pm
Location: Madinina

  • Quote

Post by man in the hill » Sun Sep 17, 2006 3:07 pm

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: Select all

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 ... ujet=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 !
Top
Post Reply
  • Print view

12 posts • Page 1 of 1

Return to “French”

Jump to
  • Assistance
  • ↳   News & Announcements
  • ↳   Frequently Asked Questions
  • ↳   Installing Gentoo
  • ↳   Multimedia
  • ↳   Desktop Environments
  • ↳   Networking & Security
  • ↳   Kernel & Hardware
  • ↳   Portage & Programming
  • ↳   Gamers & Players
  • ↳   Other Things Gentoo
  • ↳   Unsupported Software
  • Discussion & Documentation
  • ↳   Documentation, Tips & Tricks
  • ↳   Gentoo Chat
  • ↳   Gentoo Forums Feedback
  • ↳   Duplicate Threads
  • International Gentoo Users
  • ↳   中文 (Chinese)
  • ↳   Dutch
  • ↳   Finnish
  • ↳   French
  • ↳   Deutsches Forum (German)
  • ↳   Diskussionsforum
  • ↳   Deutsche Dokumentation
  • ↳   Greek
  • ↳   Forum italiano (Italian)
  • ↳   Forum di discussione italiano
  • ↳   Risorse italiane (documentazione e tools)
  • ↳   Polskie forum (Polish)
  • ↳   Instalacja i sprzęt
  • ↳   Polish OTW
  • ↳   Portuguese
  • ↳   Documentação, Ferramentas e Dicas
  • ↳   Russian
  • ↳   Scandinavian
  • ↳   Spanish
  • ↳   Other Languages
  • Architectures & Platforms
  • ↳   Gentoo on ARM
  • ↳   Gentoo on PPC
  • ↳   Gentoo on Sparc
  • ↳   Gentoo on Alternative Architectures
  • ↳   Gentoo on AMD64
  • ↳   Gentoo for Mac OS X (Portage for Mac OS X)
  • Board index
  • All times are UTC
  • Delete cookies

© 2001–2026 Gentoo Foundation, Inc.

Powered by phpBB® Forum Software © phpBB Limited

Privacy Policy

 

 

magic