Question sur "ls"


#1

Bonjour,
Quand je veux lister les fichiers du plus petit au plus volumineux j’utilise

$ ls -rSl

Quand je liste les fichiers du plus ancien au plus récent :

$ ls -rtl

Mais je voudrais lister les fichiers par date, et pour les fichiers du même jour, du plus petit au plus volumineux … Il doit y avoir du grep, sed, et autre joyeusetées, mais je ne les connais pas …

Un p’tit coup de main serait le bienvenue !


#2

avec un script en deux fois ?


#3

ou alors, ptet avec
ls -clt


#4

au hasard, as tu tenté un ls -rtl && ls -rs1


#5

Désolé les gars, aucune de vos propositions ne font le boulot !


#6

Si j’ai bien compris ce que tu cherche a faire :stuck_out_tongue:

EDIT= Manqué, le deuxième sort plomb le 1er :030
Je continue mes recherches xD


#7

Je galère un peut avec se truc, en fait c’est juste pour trier “un peut plus intelligemment” un dossier bourré de fichiers log !


#8

j’arrive à ceci

avec ce code (v0.1).

[code]#!/bin/bash

trie les fichiers/dossiers du dossier courant par date, puis par taille

BUG : il ne faut pas avoir des fichiers avec des : dedans

on trie les fichiers en enlevant le groupe, mettant les tailles en lisible, en enlevant l’heure si elle y est # (ce qui l’enlève aussi dans les noms de fichiers)

on enlève la première ligne qui ne donne pas de fichier

on remplace les espaces des noms de fichiers par ESPACE sinon un nom de fichier prend plusieurs colonnes

ls -lrbthG|sed ‘s/\\ /ESPACE/g’|awk ‘{ print $8" “$4” “$5” “$6” "$7}’|sed ‘s/[0-9]+:[0-9]+//g’|sed “1d” > /tmp/ls-lrthG

on crée une liste des jours déjà traités

echo “” > /tmp/blacklist

on parcourt la liste des fichiers

while read ligne
do

on extrait le jour, qui peut être jour mois ou jour mois année

jour=$(echo $ligne|awk '{ print $3" "$4" "$5 }')

on regarde si on l’a déjà traité

outgrep=$(grep  " ${jour}" < /tmp/blacklist) # pour pas que 6 soit compté comme 26
if [ "$outgrep" == "" ]
then

si non

echo "

======" ${jour} “=======”
# on a la liste des fichiers pour un même jour, ne reste plus qu’à les trier par taille

on prend dans la liste des fichiers uniquement ceux du jour, on remplace ESPACE par un espace, et le séparateur retour chariot par un :

fichiers=$(grep  " ${jour}"  < /tmp/ls-lrthG|awk '{ print $1}'|sed 's/ESPACE/\ /g'|tr "\n" ":") # > /tmp/fichiers

on remplace le séparateur par un : aussi, comme ça du n’a a traiter qu’une seule ligne contenant tous les fichiers

OLDIFS=$IFS
IFS=":"
du -sh $fichiers|sort -h

echo " $jour " >> /tmp/blacklist
IFS=$OLDIFS
fi

done < /tmp/ls-lrthG[/code]

Je pense que ça peut être largement amélioré, mais déjà ça fait presque le boulot :smiley:


#9

Ha oui, quand même … Je me doutais que sep était la-dessous, mais de la à devoir faire un script comme ça !!!


#10

Un script, ça se fait une seule fois et ensuite, ce n’est pas plus long à taper que n’importae quelle commande, je dirai même que c’est plus court.
Et puis si tu enlèves les explications, qui sont parfaitement bien venue, il sera beaucoup plus court à faire :stuck_out_tongue:


#11

en fait pas besoin de script
forum.ubuntu-fr.org/viewtopic.ph … 1#p6111801

[quote]Édit : à bah en fait non. Ça va être trop court, j’ai déjà la solution (sauf erreur de ma part…) ^^"

Bon du coup kamui57, vu que t’as un compte là bas, tu pourras poster ma solution si tu veux wink
C’était tout con en fait (pour qu’une burne en Bash comme moi y arrive).[/quote]

explications ici
forum.kubuntu-fr.org/viewtopic.p … 1#p6116071

edit : en me basant sur sort utilisée par grim7reaper, encore une option, à base de ls

Je remplace les heures par l’année en cours, je trie d’abord suivant la colonne de l’année, puis celle du mois, puis celle du jour, puis celle de la taille, avec les bons types correspondant aux types des colonnes.


#12

Je trouve qu’il est dommage que des questions de ce genre ne soient pas posées aussi dans “programmation”.
Il y a certains membres qui ne parcourent que cette seule section et au niveau bash et commandes en général, ils font le poids :wink:


#13

faut signaler aux modos pour déplacer ?


#14

Non, l’idéal aurait été de doubler le fil.


#15

je te conseille d’écrire ton propre programme en C qui fais ça :slightly_smiling:

(En C parceque c’est marrant de lire les directory en C ça va te prendre un peu de temps :wink:)


#16

J’avais développé tout un FileManager en C sous MS/DOS, contrôlable à la souris, je ne me souviens plus si les fonction utilisées étaient plus Borland que K&R, mais ce n’était pas si compliqué que ça :slightly_smiling:


#17

[quote=“kamui57”]edit : en me basant sur sort utilisée par grim7reaper, encore une option, à base de ls

d=$(date +"%Y");ls -lh|sed "s/\ [0-9][0-9]:[0-9][0-9]\ /\ $d\ /g"|sort  -k 8n,8n -k 7,7M -k  6n,6n -k 5,5h

L’option “h” dans le sort après le 5 n’est pas connu !!
Les colonnes ne semblent pas être correctes, j’ai changée la colonne 7 en 6 (les mois) et la 6 en 7 (les jours)
j’ai supprimé le “-h” du ls car cela cafouillait dans le tri des fichiers ayant moins de 1024 caractères (<1Ko) car ils étaient affichés en octet qui, naturellement, avaient une valeur plus grande que les fichiers affichés en Ko !!

d=$(date +"%Y");ls -l|sed "s/\ [0-9][0-9]:[0-9][0-9]\ /\ $d\ /g"|sort  -k 8n,8n -k 6,6M -k  7n,7n -k 5,5n

LeDub en mode correcteur.


#18

LeDub à qui l’on souhaite la bienvenue sur cet autre debian site :006


#19

Ce que je reproche à ce script, c’est qu’il “reconstruit” l’affichage, donc je perds pas mal d’info (coloration de mon bash, droit user,group,root …)
Du coup, j’ai développé un écran spécifique dans notre application, pour lister/visionner les logs … Quelque fois une question anodine entraîne le développement d’applications conséquentes !! :slightly_smiling:


#20

[quote=“debianhadic”]Ce que je reproche à ce script, c’est qu’il “reconstruit” l’affichage, donc je perds pas mal d’info (coloration de mon bash, droit user,group,root …)
Du coup, j’ai développé un écran spécifique dans notre application, pour lister/visionner les logs … Quelque fois une question anodine entraîne le développement d’applications conséquentes !! :slightly_smiling:[/quote]
la commande de LeDub ne le fait pas