#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????
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
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