Je vois systématiquement des réponses citant ce lien indiquant définitivement "Ne pas analyser ls
!" Cela me dérange pour plusieurs raisons :
-
Il semble que les informations contenues dans ce lien aient été acceptées en gros sans poser de questions, bien que je puisse relever au moins quelques erreurs de lecture occasionnelle.
-
Il semble également que les problèmes mentionnés dans ce lien n'aient suscité aucun désir de trouver une solution.
Dès le premier paragraphe :
…lorsque vous demandez
[ls]
pour une liste
de fichiers, il y a un énorme problème :Unix autorise presque tous les caractères dans
un nom de fichier, y compris les espaces, les retours à la ligne, les virgules, les symboles pipe et
à peu près tout ce que vous voulez jamais essayer d'utiliser comme délimiteur sauf
NUL. …ls
sépare les noms de fichiers par des retours à la ligne. C'est très bien
jusqu'à ce que vous ayez un fichier avec une nouvelle ligne dans son nom. Et comme je ne connais
aucune implémentation dels
qui vous permet de terminer
les noms de fichiers avec des caractères NUL au lieu de retours à la ligne, cela nous empêche
d'obtenir une liste de noms de fichiers en toute sécurité avecls
.
Merde, non ? Comment jamais pouvons-nous gérer un ensemble de données listé terminé par une nouvelle ligne pour les données susceptibles de contenir des nouvelles lignes ? Eh bien, si les personnes qui répondent aux questions sur ce site Web ne faisaient pas ce genre de choses quotidiennement, je pourrais penser que nous avions des problèmes.
La vérité est que la plupart des ls
Les implémentations fournissent en fait une API très simple pour analyser leur sortie et nous l'avons tous fait sans même nous en rendre compte. Non seulement vous pouvez terminer un nom de fichier avec null, mais vous pouvez également en commencer un avec null ou avec toute autre chaîne arbitraire que vous pourriez souhaiter. De plus, vous pouvez attribuer ces chaînes arbitraires par type de fichier . Veuillez considérer :
LS_COLORS='lc=