Trie sur nom de fichier

Résolu
Maillon Messages postés 157 Statut Membre -  
gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Alors voilà j'ai plusieurs fichiers dans un répertoire :
/home/dossier/fichier_01112009_07h00m02s.tar.gz
/home/dossier/fichier_01112009_16h00m02s.tar.gz
/home/dossier/fichier_02112009_07h00m02s.tar.gz
/home/dossier/fichier_30102009_07h00m02s.tar.gz
/home/dossier/fichier_30102009_16h00m02s.tar.gz

j'ai une boucle qui fait un :
for j in `ls  /home/dossier/*`
do
echo $ĵ
done


J'aimerai trier les fichiers par la date puis l'heure du fichier (fichier_date_heure) mais je ne trouve pas de façon simple de le faire.

Quelqu'un aurait-il une idée ?

Merci beaucoup.

Cordialement,
Configuration: Red Hat, Debian

7 réponses

  1. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
     
    La solution de lami20j n'est pas bonne car il propose un tri simple sans prise en compte de la date et de l'heure.
    Voici ma solution :

    ls -1 /home/dossier/* | sort -t "_" -k2.5,2.8 -k2.3,2.4 -k2.1,2.2 -k3.1,3.2 -k3.4,3.5 -k3.7,3.8
    1
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      La solution de lami20j n'est pas bonne

      Tu as raison ;-)
      0
    2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
       
      Ma mienne non plus d'ailleurs, mais personne ne l'a dit ;-D
      0
    3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Ben, on vieillit ;-DD
      0
    4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
       
      Ça pour sûr, mais on murit en même temps ;-))
      0
    5. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      J'ai pas osé ;)
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    ls -1 | sort
    0
  3. Maillon Messages postés 157 Statut Membre 5
     
    Merci lami20j mais ce n'est pas ce que je cherchais (je me suis mal exprimé).

    voila mon script :
    for i in `ls  /home/dossier/fichier* | wc -l`
    do
    	if [ $i -gt 0 ]
    	then
    		for j in `ls /home/dossier/fichier* `
    		do
    			echo $j
    		done
    	else 
    		exit
    	fi
    done
    


    Ce que j'aimerai faire c'est sélectionner le fichier ayant la plus ancienne date dans son nom et faire des opérations dessus (le copier dans un répertoire puis le supprimer).
    Cette opération doit etre répété tant qu'il y a des fichiers dans le répertoires.

    Au début je pensais mettre tout les noms de fichiers dans un tableau puis de trier ensuite mais ça me parait pas très simple.

    Peut-etre que le faite d'utiliser les boucles for n'est pas une bonne idée je sais pas trop.

    J'espère avoir été plus clair.

    Cordialement,
    0
  4. Maillon Messages postés 157 Statut Membre 5
     
    Merci gigaga ça à l'air de marcher :-)

    par contre je ne comprend pas tout le défilement de -k2.5,2.8 etc... pourrait tu m'expliquer ?

    Merci :-)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Maillon Messages postés 157 Statut Membre 5
     
    je viens de comprendre :-)
    c'est pas simple tout ça mais ça marche c'est cool :-)

    Merci en tout cas à vous.

    Cordialement,
    0
  7. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    [tmpfs]$ ls -1 rep/
    fichier_01112009_07h00m02s.tar.gz
    fichier_01112009_16h00m02s.tar.gz
    fichier_02112009_07h00m02s.tar.gz
    fichier_30102009_07h00m02s.tar.gz
    fichier_30102009_16h00m02s.tar.gz
    
    [tmpfs]$ ls -1tr rep/
    fichier_30102009_16h00m02s.tar.gz
    fichier_30102009_07h00m02s.tar.gz
    fichier_02112009_07h00m02s.tar.gz
    fichier_01112009_16h00m02s.tar.gz
    fichier_01112009_07h00m02s.tar.gz
    
    [tmpfs]$ 

    ;-))
    0
  8. gigaga Messages postés 2347 Date d'inscription   Statut Membre Dernière intervention   301
     
    Alors c'est pour faire des groupements de tris :
    Exemple : fichier_01112009_07h00m02s.tar.gz
    Dont le séparateur est "_", du coup j'ai 3 éléments ;
    fichier
    01112009
    07h00m02s.tar.gz

    Ensuite, je dois trier d'abord sur l'année qui se trouve dans le 2e élément du caractère 5 au caractère 8 : -k2.5,2.8

    Ensuite, je dois trier d'abord sur le mois qui se trouve dans le 2e élément du caractère 3 au caractère 4 : -k2.3,2.4

    et ainsi de suite et idem pour l'heure.
    0