Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 19/03/2007, à 02:11

misteraph

faire un petit programme qui tri des fichiers

Bonjour, j'ai eu un idée et je voudrai savoir si c'est réalisable.

Je veux creer un petit programme qui tri de façon automatique les fichiers qui arrivent dans un repertoire.

Par exemple si le fichier est un .mp3, alors il va dans le dossier ~/mp3.
Si c'est un .avi, il va dans ~/avi.

Je saurai faire ça en java ou autre mais je serai obligé de le lancer manuellement. Moi je ve que ça se fasse de façon automatique et sans manger toutes les ressources de la machine.

Si vous avec des idées, ça m'interesse !

Merci !

Hors ligne

#2 Le 19/03/2007, à 02:17

coca25

Re : faire un petit programme qui tri des fichiers

ca serait pas avec un logiciel de telechargement ca ? wink
la fonction n'existe pas deja dans le logiciel
sinon tu peux utiliser crontab pour planifier le lancement du programme qui va trier

Hors ligne

#3 Le 19/03/2007, à 04:06

misteraph

Re : faire un petit programme qui tri des fichiers

Merci pour ta réponse.
J'ai finalement fait mon programme en java et j'ai utilisé crontab pour l'executer toutes les 30 minutes.

Hors ligne

#4 Le 19/03/2007, à 06:17

misteraph

Re : faire un petit programme qui tri des fichiers

Mon programme est fini mais j'ai encore un petit problème. Je copie les fichiers avec ssh entre mes 2 machines. Le probleme, c'est que certains noms de fichiers ont des espace.
J'ai donc insérer avant chaque espace un \.
Ca donne ça : monRepertoire/mon\ Fichier

Le problème c'est que lorsque je lance mon programme avec cette manip, la copie ne se fait pas, alors que la meme commande fonctionne parfaitement dans un terminal. Par contre, je n'ai pas de problèmes avec les noms sans espaces.

Voici la ce qui me permet de lancer ma commande scp :

final Process p = Runtime.getRuntime().exec(commande);

J'espere que j'ai été clair et j'attends votre aide avec impatience !

Hors ligne

#5 Le 19/03/2007, à 12:45

coca25

Re : faire un petit programme qui tri des fichiers

si tu mets qu'un seul \ dans ta chaine en java, il est interprete par java avant le shell et
"\ " => " "
il faut doubler le \

Hors ligne

#6 Le 19/03/2007, à 13:13

misteraph

Re : faire un petit programme qui tri des fichiers

C'est déjà ce que j'ai fait.
J'ai fait un System.out.println pour voir si ça commande est bonne. Quand je la copie dans le terminal, ça fonctionne impec !

Regarde mon code :

 private String commandMp3="192.168.1.195:/home/misteraph/Desktop/mp3/";
if (nomDecoupe[1].equals(mp3))
		        		  {
		        		  System.out.println("cest un mp3");		        		 
		        		  String[] tabEspace=f1.getPath().split(" ");
		        		  int nb=tabEspace.length;
		        		  String nomFichier="";
		        		  int j=0;
		        		  for (j=0 ; j<nb-1; j++){
		        			  nomFichier=nomFichier+tabEspace[j]+"\\ ";
		        		  }
		        		  nomFichier=nomFichier+tabEspace[j];
		        		  File f2=new File(nomFichier);
		        		 System.out.println(f2.getPath());
		        		 String commande=scp+" "+f2.getPath()+" "+commandMp3;
		        		 System.out.println(commande);
		        			  try {
		      					final Process p = Runtime.getRuntime().exec(commande);
		      				} catch (IOException e) {
		      					// TODO Auto-generated catch block
		      					e.printStackTrace();
		      				}  		        		
		        		  }

Voici ce ue me donne le  System.out.println(commande) :

scp /media/EXTERNE/Mp3/mon\ mp3.mp3 192.168.1.195:/home/misteraph/Desktop/mp3/

Dernière modification par misteraph (Le 19/03/2007, à 13:14)

Hors ligne

#7 Le 19/03/2007, à 13:27

coca25

Re : faire un petit programme qui tri des fichiers

ah la...
mais c'est quoi l'erreur qu'il te sort?

Hors ligne

#8 Le 19/03/2007, à 13:39

misteraph

Re : faire un petit programme qui tri des fichiers

Bah je n'ai pas d'erreur !
J'en le disque dur de l'autre machine gratter un peu, c'est tout.

Par contre si c'est un nom de fichier sans espace, ça fonctionne très bien.

Je ne trouve pas la solution.

Hors ligne

#9 Le 19/03/2007, à 14:01

abetsic

Re : faire un petit programme qui tri des fichiers

Salut,

Personnellement j'aurai fait un script shell du genre

#!/bin/bash

for i in *.mp3; do
  mv "$i" /destination
done

for i in *.avi; do
  mv "$i" /destination
done

les guillemets autour de $i permettent de protéger les noms de fichiers avec des espaces.
Pour une copie en ssh, je sais pas si ton programme java mémorise ton mot de passe, mais pour éviter d'avoir à le taper tu peux utiliser les clefs publiques des machines (c'est bien documenté ce genre de choses)

Voilà smile

Dernière modification par abetsic (Le 19/03/2007, à 14:02)

Hors ligne

#10 Le 19/03/2007, à 14:36

coca25

Re : faire un petit programme qui tri des fichiers

pour le java, faudrait récupérer la sortie de la commande, je me rappelle plus trop, je crois que c'est un truc du genre:
p.getErrorStream ()

Hors ligne

#11 Le 19/03/2007, à 14:40

iuchiban

Re : faire un petit programme qui tri des fichiers

Ou en Ruby :

#!/usr/bin/ruby

system("clear")

Dir.entries("./").each do |fichier|
  if fichier.include?(".mp3")
    system("mv \"" + fichier + "\" mp3/")
  elsif fichier.include?(".avi")
    system("mv \"" + fichier + "\" avi/")
  elsif fichier.include?(".png")
    system("mv \"" + fichier + "\" png/")
  else
    puts "Pas un fichier à déplacer"
  end
end

Bon d'accord y'a moyen d'optimiser mais comme ça, ça déplace les fichiers avec espaces.


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#12 Le 19/03/2007, à 14:48

misteraph

Re : faire un petit programme qui tri des fichiers

Vous avez raison je me prend peut etre trop la tête avec mon java. Celà dit, ça permettait aussi de la faire tourner sous Windows, et ça interesse pas mal de mes potes.

coca25, je vais essayer ça ce soir.

Hors ligne

#13 Le 19/03/2007, à 14:55

iuchiban

Re : faire un petit programme qui tri des fichiers

Tu peux installer ruby sous Windows (mais ca prend super longtemps comparé à la version Linux).


C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.

Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.

Hors ligne

#14 Le 19/03/2007, à 16:35

misteraph

Re : faire un petit programme qui tri des fichiers

Bon j'ai réussi !
Il fallait utiliser un tableau de String au lieu d'un String.

if (nomDecoupe[1].equals(mp3))
		        		  {		        		
		        			  try {		      					
		      					Runtime runtime = Runtime.getRuntime();
		      					runtime.exec(new String[] {scp, f1.getPath(), commandMp3 } );
		      					
		      				} catch (IOException e) {		      					
		      					e.printStackTrace();
		      				}  		        		
		        		  }

Dernière modification par misteraph (Le 19/03/2007, à 16:35)

Hors ligne

#15 Le 19/03/2007, à 21:20

misteraph

Re : faire un petit programme qui tri des fichiers

Mon programme fonctionne parfaitement mais bouffe beaucoup de ressources.
Je me suis dit que c'était parce que je faisais un nouveau scp à chaque fichier.

J'ai donc decidé de faire un tableau de chaine de caractères :
chaine[0]=fichier1
chaine[1]=fichier2
chaine[1]=fichier3

ainsi à la fin je ferai un "scp chaine[0] chaine[0] chaine[0] 192.168.1.195:/home/misteraph/Desktop/"

Voici mon code :

if (chaine1[0]!=""){
		
			try {				

			Runtime runtime = Runtime.getRuntime();			
			runtime.exec(new String[] {scp, chaine1[0], commandMp3});

		} catch (IOException e) {
			e.printStackTrace();
		}
		}

Seulement ce code est faux, car là je ne mets que chaine1[0]
Je voudrais que le nombre de paramètres varient en fonction de la longueur de mon tableau de nom de fichiers.

Ainsi, si la longueur est 2, je voudrai :

runtime.exec(new String[] {scp, chaine1[0], chaine1[1], commandMp3});

Si elle est à 5, je voudrais :

runtime.exec(new String[] {scp, chaine1[0], chaine1[1], chaine1[2], chaine1[3], chaine1[4], commandMp3});

Etc...

Ca dépasse complètement mes compétences et donc j'aimerai de l'aide pour réussir à finir mon programme.

Merci d'avance !

Hors ligne

#16 Le 19/03/2007, à 22:14

coca25

Re : faire un petit programme qui tri des fichiers

il faudrait utiliser une ArrayList, y mettre les fichiers, puis la transformer en tableau avec la méthode: ToArray()

Hors ligne

#17 Le 19/03/2007, à 22:33

misteraph

Re : faire un petit programme qui tri des fichiers

Merci pour ta réponse.
Je n'ai pas le niveau et donc j'ai du mal à voir ce que tu veux dire.
Est-ce que ça te derangerais de m'écrire un petit bout de code pour m'aider à comprendre ?

Hors ligne

#18 Le 19/03/2007, à 23:02

coca25

Re : faire un petit programme qui tri des fichiers

je suis pas pro de java mais ca doit ressembler à ca:

ArrayList fichiers = new ArrayList ();
fichiers.add (scp);
fichiers.add (fichier1);
fichiers.add (fichier2);
fichiers.add (commandMp3);
String[] s;
Object[] tab = list.toArray (s);

Dernière modification par coca25 (Le 19/03/2007, à 23:04)

Hors ligne

#19 Le 19/03/2007, à 23:45

misteraph

Re : faire un petit programme qui tri des fichiers

mais apres, comment je peux appeler ma fonction ?

runtime.exec(tab);

???

Merci encore pour tes conseils.

Hors ligne

#20 Le 20/03/2007, à 00:00

coca25

Re : faire un petit programme qui tri des fichiers

runtime.exec ((String[]) tab);

Hors ligne

#21 Le 20/03/2007, à 00:19

misteraph

Re : faire un petit programme qui tri des fichiers

Merci pour ta réponse. J'ai essayé et je me suis retrouver un des NullPointerException, et c'est trop pour moi.

Je ne comprends pas ça non plus :

String[] s;
Object[] tab = list.toArray (s);

Le list, il vient d'où ?
Et il râle parce que le s n'est pas initialisé. Quand je l'initialise à "null", j'ai encore un NullPointerException.

Dernière modification par misteraph (Le 20/03/2007, à 00:25)

Hors ligne

#22 Le 20/03/2007, à 00:49

coca25

Re : faire un petit programme qui tri des fichiers

le list, je me suis gourré, c'est fichiers, le tableau que tu auras préalablement rempli par la commande, la liste des fichiers et le repertoire de destination.

la j'ai pas d'environnement java, je testerais demain.

le code c'est de tete, toArray a besoin d'un argument pour prendre le type du tableau, mais il faut peut etre qu'il soit initialisé:
essaye:

String[] tab = (String []) fichiers.toArray (new String[fichiers.size ()]);

Hors ligne

#23 Le 20/03/2007, à 16:00

tekman54000

Re : faire un petit programme qui tri des fichiers

franchement tu devrai faire un petit script TCSH ca irai bcp plus vite smile et ca sera un ptit peu plus performant que l'usine a gaz de sun smile
Je vais peut etre en faire un petit si j'ai le temps parce que il y a 2-3 jours je pensais faire pareil lol...


------------------------------------------------------------------------------------------------
"The day Microsoft makes something that doesn’t suck is probably the day they start making vacuum cleaners"  Ernst Jan Plugge
------------------------------------------------------------------------------------------------

Hors ligne