URL: https://linuxfr.org/forums/programmation-shell/posts/find-sort-nul-char Title: find, sort & nul char Authors: Marotte ⛧ Date: 2016年11月30日T22:09:55+01:00 License: CC By-SA Tags: bash, shell, find et sort Score: 2 Bonjour, J’ai un script qui stock l’état des permissions d’un répertoire dans un fichier. Pour comparer l’état courant avec l’état sauvegardé je procède ainsi : ```bash function check() { diff -aBy <(cat 1ドル) <(store 2ドル) | tr "000円" " " |egrep '\s\||>|<\s' } ``` ```1ドル``` est mon fichier dans lequel sont stockés les permissions ```2ドル``` est le répertoire concerné Le fichier est généré ainsi (c’est la fonction 'store' utilisée ci-dessus) : ```bash function store() { find "1ドル" -printf "%u000円%g000円%m000円%h/%f\n" } ``` (ici ```1ドル``` est le répertoire concerné) J’obtiens ce genre d’output : ``` stef stef 640 ./README.md | stef staff 600 ./README.md stef stef 750 ./.git | stef stef 710 ./.git ``` C’est super, c’est exactement ce que je veux, un moyen d’avoir rapidement une vue sur d’éventuelles modifications des droits ou sur l’ajout de nouveaux fichiers dans une arborescence. Quelque temps plus tard je me suis dit : « Hé patate ! Tu ne sais pas si l’ordre (des fichiers en sortie de la commande find) sera toujours le même, tu devrais trier ! » Quand je commence à m’appeler patate, je fais pas le malin et je m’obéis... donc je fais ça : ```bash diff -aBy <(sort 1ドル) <(store 2ドル | sort) | tr "000円" " " |egrep '\s\||>|<\s' ``` et là patatra je n’ai plus le même résultat : ```> stef staff 600 ./README.md stef stef 750 ./.git | stef stef 710 ./.git ``` il m’en manque un bout (et parfois j’ai un décalage d’une ligne). J’ai le même comportement si j’effectue le sort à l’intérieur de la fonction 'store'. Je ne comprends pas pourquoi. Comment puis-je m’assurer de comparer deux sorties de find (entre une exécution de store et l’exécution précédente stockée dans un fichier) qui soient toujours dans le même ordre ? (Est-ce que nativement find crache les fichiers toujours dans le même ordre ?) Est-ce que ce serait l’utilisation du caractère nul qui me joue des tours ici ? D’après ce que je lis, il n’est pas possible de stocker une chaîne contenant ce caractère dans une variable mais tubes et redirections ne devraient pas poser de problème.