1 votes

Trier les dossiers d'abord, puis les fichiers [El Capitan].

Je suis conscient qu'il y a de nombreux messages sur ce problème, mais la plupart ne sont que des solutions de contournement pour le Finder. Cependant, j'utilise plus souvent la console que le Finder en raison de la programmation.

Je suis également conscient de quelque chose comme ceci (après avoir obtenu coreutils) :

alias ll='gls -la -h --group-directories-first'

Mais c'est juste un autre "plugin" ou utilitaire externe, qui fait bien le travail mais ne répond pas à ma question.

J'ai également découvert que Dropbox web trie également vos fichiers en fonction de l'agent utilisateur. S'il passe du menu Développer de Safari à IE ou Firefox/Chrome (Widows), il trie les dossiers en premier.

Je comprends qu'OS X et Windows doivent être des rebelles et qu'ils utilisent des tris différents, mais franchement, c'est un désastre quand on a beaucoup de fichiers et qu'ils sont tous mélangés.

Est-ce que OS X a un paramètre général pour cela de sorte que lorsque je tape ls -la la sortie est triée par dossiers d'abord, puis par fichiers et les deux sont classés par ordre alphabétique croissant (de a à z) ? Ou le mécanisme de tri est-il lié à l'implémentation du programme/de l'application qui affiche les fichiers ?

0 votes

Bienvenue sur Ask Different. J'ai essayé de poser une question claire à la fin du message. Pouvez-vous l'éditer si j'ai manqué votre point principal ?

0 votes

Fait alias ls='ls -laO | grep "^d" && ls -laO | grep "^-" && ls -laO | grep "^l"' répondent à vos besoins en matière de terminal ?

0 votes

Non, ce n'est pas le cas.

1voto

Eirik Fuller Points 700

Je pense que la réponse simple est non, si la question est de savoir si l'indigène ls peut être configurée pour lister les répertoires avant de lister les non-répertoires. Un des commentaires suggère un pipeline shell, mais plutôt que de se donner cette peine, il pourrait être plus facile d'écrire un script.

Le code Python suivant n'est en aucun cas destiné à être un substitut complet de l'application ls mais en la compliquant pour qu'elle puisse gérer davantage de ce que les ls semble réalisable (la fonction argparse serait utile à cet égard).

#!/usr/bin/python                                                                                                                                                                    

import os
import sys

for top in sys.argv[1:]:
    for (name, dirs, files) in os.walk(top):
        print("{}:".format(name))
        for dir in dirs:
            print("{}/".format(dir))
        for file in files:
            print(file)

Ce qui rend la séparation des répertoires et des non-répertoires facile dans cet exemple, c'est que le langage Python os.walk le fait pour moi, dans sa valeur de retour. L'utilisation de os.walk impose implicitement l'équivalent de ls -R mais ce problème devrait être facile à résoudre en adaptant le code de l'application os.walk qui est un code Python natif construit au-dessus de l'application os.listdir y os.path.isdir plutôt que d'invoquer os.walk directement.

En ce qui concerne la question des capacités natives par rapport aux utilitaires externes, Python est natif dans les versions récentes de MacOS . Le classement de ce type de script par rapport à l'intégration d'une fonctionnalité externe est une question de goût.

Il peut y avoir une invocation de find qui correspond à vos critères, à l'instar du ls dans un commentaire, en utilisant l'option -type dans de multiples invocations de find mais cela me semble maladroit par rapport au code Python.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X