Question
garder le fichier le plus gros si doublons
- akwell
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 9
- Remerciements reçus 0
il y a 12 ans 1 mois #16838
par akwell
garder le fichier le plus gros si doublons a été créé 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
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.
- Charles
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 27
- Remerciements reçus 0
il y a 12 ans 1 mois #16841
par Charles
Réponse de Charles sur le sujet Re:garder le fichier le plus gros si doublons
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)+\"\w\"
# 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]
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)+\"\w\"
# 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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 12 ans 1 mois #16842
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:garder le fichier le plus gros si doublons
Salut,
Elreyatem écrit:
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 \"C:\temp\$_\" (get-Random -Maximum 1000) >$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]
Elreyatem écrit:
Comme le sujet m'intéresse j'ai effectué qq tests qui amènent deux remarques :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).
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 \"C:\temp\$_\" (get-Random -Maximum 1000) >$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.
- Charles
- Hors Ligne
- Membre junior
-
Réduire
Plus d'informations
- Messages : 27
- Remerciements reçus 0
il y a 12 ans 1 mois #16847
par Charles
Réponse de Charles sur le sujet Re:garder le fichier le plus gros si doublons
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.
[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.
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.080 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- garder le fichier le plus gros si doublons