Me gusta poder nombrar archivos y directorios con un prefijo de subrayado si es algo que quiero mantener separado de otros archivos y directorios en el mismo nivel. En Windows y Mac, por ejemplo, el prefijo de un archivo con un guión bajo lo ordena al principio, delante de los archivos que comienzan con un carácter alfanumérico.
Se descubrió que Google tiene que ver con LC_COLLATE y mi ubicación actual (en_US). Eso está bien, aunque realmente no entiendo por qué en_US no se ordena como se esperaba.
Basado en la configuración regional del sitio de demostración de ICU Collate en en_US_POSIX ciertamente parece tener el orden de clasificación que estoy buscando (debe editar los datos de muestra y agregar algunos guiones bajos para probarlo). Pero realmente no veo cómo aplicar esto en mi shell de Linux.
Idealmente, me gustaría poder configurar algo en mi configuración bash para que ls siempre clasifique los guiones bajos primero. ¿Cómo haría para hacer esto?

Respuestas:
Si no puede
lsordenar de la manera que desea, pruebe la expansión de shell.Puede usar patrones de nombre de archivo para ejecutar
lscon una lista de archivos que el shell ya ordenó, omitiendo el método quelsusa.Asumiendo que tienes los archivos
esto es como correr
Explicación:
_*es un patrón de shell que coincide con cualquier nombre de archivo que comienza con un guión bajo, expandido en orden alfabético.[!_]*coincide con cualquier nombre de archivo que no comience con un guión bajo, expandido en orden alfabético.-fle dicelsa no ordenar, porque el shell ya lo hizo.Más información: expansión de nombre de archivo bash
Si hay directorios en el directorio actual, querrá ejecutar el comando de esta manera para evitar la inclusión de archivos en los directorios:
fuente
_para hacer que los archivos aparezcan primero es un truco específico del sistema operativo; y la versión unix de este truco es comenzar el nombre del archivo con una letra mayúscula: la convención predeterminada de Unix es usar solo letras minúsculas en los nombres de los archivos.00README.-fle dice quelsno haga su propia clasificación, por lo que muestra sus argumentos en el orden en que se pasan. El resultado de cada expansión de comodín de shell_*y[!_]*es una lista ordenada lexicográficamente.lsse ordenan (en dos grupos: los que comienzan con_los otros) cuando son generados por el shell. Correecho ls -lf _* [!_]*para ver qué pasa. La-fbandera le dice quelsno haga ninguna clasificación.Si no le importa mezclar minúsculas y mayúsculas, establezca su configuración regional en
C, que toma los caracteres en su orden numérico._cae entre mayúsculas y minúsculas.La configuración regional
LC_MESSAGES(idioma de los mensajes de error),LC_CTYPE(juegos de caracteres) yLC_TIME(formato de fecha y hora) son muy útiles.LC_COLLATEyLC_NUMERICgeneralmente son más problemáticos de lo que valen, no recomiendo configurarlos. La ordenación lexicográfica adecuada es más complicada de lo queLC_COLLATEse supone que debe especificar, y puede causar todo tipo de comportamientos extraños cuando usa rangos de caracteres en expresiones regulares.LC_NUMERICes principalmente cosmético, excepto cuando algo sale terriblemente mal porque algún programa produjo un número con un separador decimal distinto de..fuente
VAR=value cmdconjuntosVARavaluesólo en el entorno decmdy no toca el valor (o la ausencia de valor) en el shell en el que se ejecuta. Para que el guión bajo aparezca antes que en mayúscula, deberá definir su propia configuración regional. Esto es posible, pero difícil de usar, porque al menos en Linux, la biblioteca estándar solo busca definiciones de configuración regional/usr/lib/locale: no hay ninguna~/.localevariable de entorno en la que pueda establecer suen_tomconfiguración.lscomando, sigue la sugerencia de Mikel .Desafortunadamente, Linux usa glibc para su información local, no ICU, por lo que no hay forma de aplicarlo directamente a Linux sin gastar mucho esfuerzo, ya sea readaptando ICU en glibc o complementando la información local en glibc.
fuente
Agregar el
-finterruptor (sin ordenar) hizo que se mostrara así para mí.man lsfuente
touch 3 1 _1 _3 2 _2 && ls -flsalidas2 . 1 3 _2 _3 .. _1