View previous topic :: View next topic |
Author |
Message |
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Fri Sep 15, 2006 3:10 pm Post subject: [SCRIPT RUBY] Ranger son home facilement ! |
|
|
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 ! |
ou
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 |
|
|
loopx Advocate
Joined: 01 Apr 2005 Posts: 2787 Location: Belgium / Liège
|
Posted: Sat Sep 16, 2006 1:10 am Post subject: |
|
|
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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Sat Sep 16, 2006 2:04 am Post subject: |
|
|
loopx wrote: | Yep, pour les extentions:
video: mpg rm rmvb wmv vob?
archive: ace
music: ogg wma
cpp: cxx
image: tif (tiff?) |
Merci ! _________________ Get Up and Go ! |
|
Back to top |
|
|
Temet Advocate
Joined: 14 Mar 2006 Posts: 2586 Location: 92
|
Posted: Sat Sep 16, 2006 6:21 am Post subject: |
|
|
"nrj" c'est pas plutot les iso made in Nero ça ? |
|
Back to top |
|
|
cylgalad Veteran
Joined: 18 Apr 2003 Posts: 1327 Location: France
|
Posted: Sat Sep 16, 2006 10:52 am Post subject: |
|
|
Non, c'est .nrg...
Sinon un cerveau c'est très pratique pour faire du rangement... |
|
Back to top |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Sat Sep 16, 2006 11:29 am Post subject: |
|
|
Temet wrote: | "nrj" c'est pas plutot les iso made in Nero ça ? |
C'est une radio ça, non ? je déconne , franchement je n'ai pas pris la peine de vérifier 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 ! .... _________________ Get Up and Go ! |
|
Back to top |
|
|
Temet Advocate
Joined: 14 Mar 2006 Posts: 2586 Location: 92
|
Posted: Sat Sep 16, 2006 8:40 pm Post subject: |
|
|
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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Sat Sep 16, 2006 9:18 pm Post subject: |
|
|
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 !
@+ _________________ Get Up and Go ! |
|
Back to top |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Sun Sep 17, 2006 12:24 pm Post subject: |
|
|
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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Sun Sep 17, 2006 2:31 pm Post subject: |
|
|
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 çà , 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 |
|
|
Sleeper l33t
Joined: 12 Nov 2002 Posts: 667
|
Posted: Sun Sep 17, 2006 2:49 pm Post subject: |
|
|
man in the hill wrote: |
Pas mal tout çà , 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 |
|
|
man in the hill Veteran
Joined: 15 Dec 2005 Posts: 1552 Location: Madinina
|
Posted: Sun Sep 17, 2006 3:07 pm Post subject: |
|
|
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 , je vais tester tout ça et si j'ai un soucis, je ferais appelle à toi . ... Le DSL, je connaissais pas ...
_-_ Pendant que j'y suis et que tu y es , 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 , il n'y a pas de soucis ! En tous cas il est fonctionnel à 100% dans son job ! Merci ! @ + [/EDIT] _________________ Get Up and Go ! |
|
Back to top |
|
|
|
|
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
|
|