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 25/04/2019, à 17:14

AGPArchitecture

[RESOLU] resultat etonnant find et sort

Bonsoir à tous,

J'utilise le code suivant pour ramener l'ensemble des fichiers de sous-dossier vers un dossier racine.
La conservation de l'ordre sur base du nom est primordial pour moi

	local i=0
	find "$dossier" -type f -name "*.*" -print0 | sort -n | 
	while IFS= read -r -d '' fi; do
		echo "$fi"
		# mv "$fi" "$dossier/${nomfichier%.*}-$i"
		#((i++))
	done

Lorsque j'affiche le résultat il y a des incohérence dans le classement. voir ci apres :

/media/00-Temp/[2019] dossier  4-1/22.jpg  CA MERDE LA
/media/00-Temp/[2019] dossier  4-1/02.jpg
/media/00-Temp/[2019] dossier  4-1/03.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-1/19.jpg
/media/00-Temp/[2019] dossier  4-1/20.jpg
/media/00-Temp/[2019] dossier  4-1/21.jpg   POURQUOI LE 22.jpg N EST PAS LA 
/media/00-Temp/[2019] dossier  4-1/23.jpg
/media/00-Temp/[2019] dossier  4-1/24.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-1/50.jpg
/media/00-Temp/[2019] dossier  4-1/51.jpg
/media/00-Temp/[2019] dossier  4-1/52.jpg
/media/00-Temp/[2019] dossier  4-1/53.jpg
/media/00-Temp/[2019] dossier  4-2/23.jpg  CA MERDE LA
/media/00-Temp/[2019] dossier  4-2/03.jpg
/media/00-Temp/[2019] dossier  4-2/04.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-2/20.jpg
/media/00-Temp/[2019] dossier  4-2/21.jpg
/media/00-Temp/[2019] dossier  4-2/22.jpg  POURQUOI LE 23.jpg N EST PAS LA 
/media/00-Temp/[2019] dossier  4-2/24.jpg
/media/00-Temp/[2019] dossier  4-2/25.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-2/46.jpg
/media/00-Temp/[2019] dossier  4-2/47.jpg
/media/00-Temp/[2019] dossier  4-3/22.jpg  CA MERDE LA
/media/00-Temp/[2019] dossier  4-3/02.jpg
/media/00-Temp/[2019] dossier  4-3/03.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-3/19.jpg
/media/00-Temp/[2019] dossier  4-3/20.jpg
/media/00-Temp/[2019] dossier  4-3/21.jpg  POURQUOI LE 22.jpg N EST PAS LA 
/media/00-Temp/[2019] dossier  4-3/23.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-3/38.jpg
/media/00-Temp/[2019] dossier  4-3/39.jpg
/media/00-Temp/[2019] dossier  4-3/40.jpg
/media/00-Temp/[2019] dossier  4-3/41.jpg
/media/00-Temp/[2019] dossier  4-3/42.jpg
/media/00-Temp/[2019] dossier  4-3/43.jpg
/media/00-Temp/[2019] dossier  4-4/03.jpg
/media/00-Temp/[2019] dossier  4-4/04.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-4/38.jpg
/media/00-Temp/[2019] dossier  4-4/39.jpg
/media/00-Temp/[2019] dossier  4-4/40-41.jpg
/media/00-Temp/[2019] dossier  4-4/42.jpg
/media/00-Temp/[2019] dossier  4-5/03.jpg
/media/00-Temp/[2019] dossier  4-5/04.jpg
... classement ok
/media/00-Temp/[2019] dossier  4-5/22.jpg
/media/00-Temp/[2019] dossier  4-5/23.jpg

Pourquoi le code plante sur seulement quelque fichier et même pas tous les 22.jpg ou 23.jpg?

Comment faire pour obtenir ce que je veux si le code ne le permet pas??

Merci pour votre aide et vos conseils

Dernière modification par AGPArchitecture (Le 25/04/2019, à 20:05)

Hors ligne

#2 Le 25/04/2019, à 17:33

pingouinux

Re : [RESOLU] resultat etonnant find et sort

Bonjour,
J'ai fait un tri sur tes résultats (sort ou sort -n), et les fichiers sont remis dans le bon ordre. N'y aurait-il pas, dans les noms de tes fichiers, des caractères bizarres faussant le tri et n'apparaissant pas à l'écran ?
Tu peux le vérifier avec

ls -b

Hors ligne

#3 Le 25/04/2019, à 17:39

Watael

Re : [RESOLU] resultat etonnant find et sort

salut,

la notion d'ordre tel que tu le suggères n'existe pas dans un système de fichiers.
c'est l'outil qui détermine quel ordre donner à l'affiche du contenu d'un répertoire.
en l'occurrence quelle commande utilises-tu pour constater ce "mésordre" ? c'est le script ?
alors, c'est "l'ordre" donné par find, qui est le même que celui du système de fichier brut, qui, lui, si j'ai bien compris, hashé, et n'est donc ni alphabétique, ni numérique.
et, ce, parce que sort n'est probablement pas appliqué, à cause de -print0, il ne voit qu'une seule ligne; il faut lui ajouter une option --zero-terminated, ou l'appliquer sur la sortie de boucle.

Dernière modification par Watael (Le 25/04/2019, à 17:40)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#4 Le 25/04/2019, à 17:55

AGPArchitecture

Re : [RESOLU] resultat etonnant find et sort

@ pingouinux

> ls -b
02.jpg  04.jpg  06.jpg  08.jpg  10.jpg  12.jpg  14.jpg  16.jpg  18.jpg  20.jpg  22.jpg  24.jpg  26.jpg  28.jpg  30.jpg  32.jpg  34.jpg  36.jpg  38.jpg  40.jpg  42.jpg  44.jpg  46.jpg  48.jpg  50.jpg  52.jpg
03.jpg  05.jpg  07.jpg  09.jpg  11.jpg  13.jpg  15.jpg  17.jpg  19.jpg  21.jpg  23.jpg  25.jpg  27.jpg  29.jpg  31.jpg  33.jpg  35.jpg  37.jpg  39.jpg  41.jpg  43.jpg  45.jpg  47.jpg  49.jpg  51.jpg  53.jpg

Ca ne montre pas de caractère spéciaux merci pour la piste

@Watael

le mésordre est bien constater par le résultat du script. Par contre j'ai essayé un find seul et le désordre est bien présent directement dans le find et exactement de la même manière que pour le script. Jamais de modification du changement d'ordre.

par contre je ne vois pas comment utiliser l'option --zero-terminated, ou l'appliquer sur la sortie de boucle. Serait-il possible d'avoir un exemple?

j'ai remplacé  par sort -t -V et cela semble fonctionner mais est-ce que ca fonctionnera tout le temps peut importe le nom des fichier????

Watael a écrit :

c'est l'outil qui détermine quel ordre donner à l'affiche du contenu d'un répertoire.

Comment le system de fichier est-il alors ordonné de base ou comment find "choisit"-t-il l'ordre?

merci

Dernière modification par AGPArchitecture (Le 25/04/2019, à 18:07)

Hors ligne

#5 Le 25/04/2019, à 18:17

Watael

Re : [RESOLU] resultat etonnant find et sort

find ne choisit par l'ordre, il affiche les données telles qu'elles apparaissent dans le système de fichier, qui, pour sa part, effectue un hash des noms de fichiers (comme un tableau associatif en bash).

soit tu appliques sort avec --zero-terminated sur la sortie find:

find ... -print0 | sort --numeric-sort --zero-terminated |while ...

soit sans cette option sur la sortie de la boucle :

find...-print0 | while...done | sort -n

Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 25/04/2019, à 18:43

AGPArchitecture

Re : [RESOLU] resultat etonnant find et sort

merci Watael. Ca fonctionne parfaitement avec sort --numeric-sort --zero-terminated

par contre je me pose la question de savoir si il n'existe pas une fonction qui permet plutôt un classement sur de l'alpha numérique pour prendre en compte les fichiers avec des noms comme :

photo1, photo2, ...., photo9, photo10, photo11, ...

E tous cas merci pour les éclaircissements

Dernière modification par AGPArchitecture (Le 25/04/2019, à 18:44)

Hors ligne

#7 Le 25/04/2019, à 19:00

pingouinux

Re : [RESOLU] resultat etonnant find et sort

AGPArchitecture #6 a écrit :

par contre je me pose la question de savoir si il n'existe pas une fonction qui permet plutôt un classement sur de l'alpha numérique pour prendre en compte les fichiers avec des noms comme :

photo1, photo2, ...., photo9, photo10, photo11, ...

sort -V devrait convenir (c'est pour trier des numéros de version).

Hors ligne

#8 Le 25/04/2019, à 20:04

AGPArchitecture

Re : [RESOLU] resultat etonnant find et sort

Ca fonctionne. En tout cas ca fait ce que je veux.

Merci pour votre aide à tous les deux.

hop résolu

Hors ligne