Ordenar primero las carpetas, luego los archivos [El Capitán]

0

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

También soy consciente de algo como esto (después de obtener coreutils):

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

Pero eso es solo otro 'complemento' o utilidad externa, que funciona bien pero no responde a mi pregunta.

También descubrí que la web de Dropbox también ordena sus archivos de acuerdo con el Agente de usuario. Si se cambia del menú Desarrollar en Safari a IE o Firefox / Chrome (viudas), primero se ordenan las carpetas.

Entiendo que OS X y Windows deben ser rebeldes, por lo que usan una clasificación diferente, pero francamente es un desastre cuando tienes muchos archivos y todos se mezclan.

¿OS X tiene una configuración de todo el sistema para esto, así que cuando escribo ls -la la salida es primero las carpetas ordenadas, luego los archivos y ambos son alfabéticamente ascendentes (de A a Z)? ¿O está el mecanismo de clasificación relacionado con la implementación del programa / aplicación que muestra los archivos?

    
pregunta Horkyze 18.01.2016 - 22:50

1 respuesta

1

Creo que la respuesta simple es no, si la pregunta es si el comando ls nativo puede configurarse para enumerar directorios antes de enumerar no directorios. Uno de los comentarios sugiere una canalización 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 comando ls , pero complicarlo para manejar más de lo que ls proporciona se puede hacer (el módulo argparse de python ayudaría con eso).

#!/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 directorios y no directorios sea fácil en este ejemplo es que os.walk de python hace eso por mí, en su valor de retorno. El uso de os.walk impone implícitamente el equivalente de ls -R , pero debería ser fácil de arreglar adaptando el código de os.walk , que es un código de Python nativo creado 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 de las versiones recientes de MacOS . Donde las secuencias de comandos de este tipo se comparan con las funciones externas, es cuestión de gustos.

Puede haber una invocación de find que se ajuste a sus criterios, similar a la canalización ls en un comentario, usando la opción -type en invocaciones múltiples de find , pero para mí eso es torpe en comparación con código python.

    
respondido por el Eirik Fuller 25.01.2016 - 02:13

Lea otras preguntas en las etiquetas