1 votos

Ordenar primero las carpetas y luego los archivos [El Capitan]

Soy consciente de que hay muchos posts sobre este problema, pero muchos son sólo soluciones para Finder. Sin embargo, yo uso la consola más a menudo que Finder debido a la programación.

También estoy al tanto de algo así (después de conseguir coreutils):

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

Pero eso es sólo otro 'plugin' o utilidad externa, que hace el trabajo bien pero no responde a mi pregunta.

También descubrí que la web de Dropbox también ordena tus archivos según el Agente de Usuario. Si se cambia del menú Desarrollo en Safari a IE o Firefox/Chrome (Widows) entonces ordena las carpetas primero.

Entiendo que OS X y Windows deben ser rebeldes por lo que utilizan una ordenación diferente pero francamente es un lío cuando tienes muchos archivos y se mezclan todos.

¿Tiene OS X una configuración para todo el sistema para que cuando escriba ls -la ¿la salida se ordena primero en carpetas y luego en archivos y ambos son alfabéticamente ascendentes (de la a a la z)? ¿O el mecanismo de ordenación está relacionado con la implementación del programa/aplicación que muestra los archivos?

1voto

Eirik Fuller Puntos 53

Creo que la respuesta simple es no, si la pregunta es si el nativo ls puede configurarse para que liste los directorios antes que los no directorios. Uno de los comentarios sugiere una tubería de shell, pero en lugar de ir a ese problema podría ser más fácil escribir un script.

El siguiente código de Python no pretende de ninguna manera ser un sustituto completo del ls pero complicándolo para manejar más de lo que ls proporciona se siente factible (Python's argparse ayudaría a ello).

#!/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)

Lo que hace que la separación de los directorios de los no directorios sea fácil en este ejemplo es que el sistema de Python os.walk lo hace por mí, en su valor de retorno. El uso de os.walk impone implícitamente el equivalente a ls -R pero eso debería ser fácil de arreglar adaptando el código de os.walk que es código nativo de Python construido sobre os.listdir y os.path.isdir en lugar de invocar os.walk directamente.

Con respecto a la cuestión de las capacidades nativas frente a las utilidades externas, Python es nativo en las últimas versiones de MacOS . La clasificación de este tipo de secuencias de comandos en comparación con la incorporación de funciones externas es una cuestión de gustos.

Puede haber una invocación de find que se ajusta a sus criterios, similar al ls en un comentario, utilizando el botón -type en múltiples invocaciones de find pero a mí me parece torpe comparado con el código de Python.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X