Question garder le fichier le plus gros si doublons

Plus d'informations
il y a 12 ans 1 mois #16838 par akwell
Bonjour,
suite à un process, je récupère une série d'images dont voici :

Comme vous pouvez voir, l'ensemble des fichiers commence par un numéro. Si je n'ai qu'un seul fichier par numéro c'est parfait mais dans certains cas, j'ai plusieurs fichiers , j'aimerais écrire un script qui ne conserve que le fichier le plus volumineux. Cette fois je sèche un peu car je ne sais pas du tout comment approcher le problème.
d'avance merci pour votre aide.
Akwell<br><br>Message édité par: akwell, à: 27/01/14 21:26
Pièces jointes :

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 1 mois #16841 par Charles
Bonjour,

Il faudrait voir si le processus permettant de récupérer les images ne permet pas de faire le tri que tu souhaites.

Sinon, si tu veux une première piste, le morceau de code suivant te permettras d'obtenir le fichier les plus gros par nom (ne gère pas les doublons de tailles à ce niveau).

[code:1]
# Récupère les fichiers par nom, tailles, les classes par nom.
$dossiers = Get-ChildItem | Select Name, Length | Sort-Object Name
$tacket = 0
while ($tacket -lt $dossiers.count)
{
# On cherche les fichiers correspondant à la demande.
$fichiers_analysees = $dossiers -match $dossiers[$tacket].Name.Substring(0,4)+\&quot;\w\&quot;
# On récupère le fichier le plus lourd
$fichier_retenu = $fichiers_analysees | Sort-Object -Descending Length | Select-Object -First 1
$fichier_retenu
# On se place après les fichiers analysés.
$tacket = $tacket + $fichiers_analysees.count + 1
}

[/code:1]

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 1 mois #16842 par Laurent Dardenne
Salut,
Elreyatem écrit:

Sinon, si tu veux une première piste, le morceau de code suivant te permettras d'obtenir le fichier les plus gros par nom (ne gère pas les doublons de tailles à ce niveau).

Comme le sujet m'intéresse j'ai effectué qq tests qui amènent deux remarques :
La taille du token de recherche est sur 5 chiffres et le calcul de l'index $tacket ne dois pas ajouter un, sinon les fichiers uniques ne sont pas dans le résultat.

Une autre approche, sans calcul d'index, si ce n'est pour obtenir le fichier recherché en cas de doublons :
[code:1]
#Création des fichier de test de taille aléatoire
$T=@(
'01282abcd_face01.jpg',
'01282abcd_face02.jpg',
'08212abcd_face01.jpg',
'08212abcd_face02.jpg',
'01538abcd_face01.jpg',
'07426abcd_face01.jpg',
'02434abcd_face01.jpg',
'02434abcd_face02.jpg',
'02434abcd_face03.jpg'
)
$T|% {fsutil file createnew \&quot;C:\temp\$_\&quot; (get-Random -Maximum 1000) &gt;$null }

Get-ChildItem *.jpg|
Group-object -property {$_.Name.Substring(0,5)} |
Foreach {
@($_.Group|Sort-Object -Property Length -Descending )[0]
}

#Remove-item fichiers de test
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 12 ans 1 mois #16847 par Charles
Effectivement je n'avais pas envisagé le cas de figure où le fichier est seul. A ce moment si on veut rendre le morceau de script viable il faut juste rajouter une condition.

[code:1]
if($fichiers_analysees.count -eq 1)
{
$tacket++;
}
else
{
$tacket = $tacket + $fichiers_analysees.count + 1;
}
[/code:1]

J'avais pas envisagé le Group-Object pour la recherche. C'est une autre approche plutôt pas mal. :D

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.080 secondes
Propulsé par Kunena