Hacer que ls sea consciente del indicador de archivo "oculto"

12

¿Es posible lsconocer el hiddenindicador de archivo en Mac OS X?

Actualmente, un simple ls -lOproduce:

$ ls -lO
total 0
drwxr-xr-x@  84 danielbeck  staff  -      2856 29 Mai 22:44 Applications
drwx------+ 158 danielbeck  staff  -      5372 29 Mai 15:27 Desktop
drwx------@ 250 danielbeck  staff  -      8500 30 Mai 20:40 Documents
drwx------+  11 danielbeck  staff  -       374 29 Mai 22:21 Downloads
drwx------@  84 danielbeck  staff  -      2856 29 Mai 22:48 Library
drwx------@   3 danielbeck  staff  hidden  102  3 Apr 20:45 Movies
drwx------@   5 danielbeck  staff  hidden  170  3 Apr 20:45 Music
drwx------+ 215 danielbeck  staff  -      7310 29 Mai 22:54 Pictures
drwxr-x---@   7 danielbeck  staff  hidden  238  3 Apr 20:45 Public
drwxr-xr-x@   4 danielbeck  staff  hidden  136 24 Apr 23:25 Sites

Por lo tanto, tenemos tres tipos de visibilidad: archivos regulares, visibles, archivos con la hiddenmarca de archivo, que en realidad no están ocultos en la Terminal, y archivos realmente ocultos cuyos nombres comienzan con un punto.

¿Hay alguna manera, por ejemplo, usando un alias o una función de shell confiable, para hacer que el lstratamiento hiddenmarcado y los .dothiddenarchivos sean iguales, es decir, ocultarse de forma predeterminada y mostrar con ls -Ao ls -a, de forma similar a cómo se comporta Finder dependiendo del valor de defaults read com.apple.Finder AppleShowAllFiles?

Soy consciente de que man chflagsmenciona específicamente que la hiddenbandera solo se esconde de la GUI, es decir, Finder.

Daniel Beck
fuente

Respuestas:

8

Estos son los pasos para obtener un OS X lsque oculta los archivos con el indicador oculto a menos que -a/-Ase especifique la opción, similar a los archivos de puntos.

  1. Instalar Xcode. Estoy usando Xcode 4.5.1 a continuación.
  2. Descargue las versiones de su sistema operativo libutily file_cmdsde http://www.opensource.apple.com . Hay un botón de descarga en el lado derecho de cada entrada de la lista de paquetes. Esta guía fue escrita para OS X 10.8.2, YMMV con los pasos exactos a continuación si está en una versión diferente.
  3. Extraer ambos archivos.
  4. Abra el file_cmds.xcodeprojin Xcode y seleccione para construir el lsobjetivo.

    Captura de pantalla

  5. Seleccione el file_cmdsproyecto Xcode a la izquierda y seleccione el lsobjetivo en el área principal. En la pestaña Configuración de compilación , busque Rutas de búsqueda de encabezado en la categoría Encabezados y agregue la ruta a la carpeta donde la extrajo libutil.

    Captura de pantalla

  6. Abra el archivo print.cen la lscarpeta de la izquierda y elimine la línea que dice #include <membershipPriv.h>. Guarde el archivo luego. Esto debería romper algo, porque incluye hay por una razón, pero aún no he determinado qué es.

  7. Abra el archivo ls.cen la misma carpeta y busque un comentario que diga /* Only display dot file if -a/-A set. */en la displayfunción. Reemplácelo y la condición debajo de él con lo siguiente:

    /* Only display dot file and file with hidden flag if -a/-A set. */
    sp = cur->fts_statp;
    if (((sp != NULL && (sp->st_flags & 0x8000)) || cur->fts_name[0] == '.') && !f_listdot) {
        cur->fts_number = NO_PRINT;
        continue;
    }
    
  8. Presione Cmd- Bpara construir.

    ¡Éxito!

  9. Seleccione Productos a la izquierda (final de la lista de carpetas) y haga clic con el botón derecho ls. Seleccione Mostrar en el buscador .

    Captura de pantalla de la carpeta Build Output

  10. Mueva el lsejecutable a un lugar conveniente, por ejemplo, su directorio de inicio. Luego abra Terminal y ejecute sudo mv $HOME/ls /bin/ls, o, mejor aún, cree una nueva carpeta nombrada binen su directorio de inicio y muévala allí. Agregue esa carpeta a su PATHposterior.

Probar el resultado:

$ mkdir test
$ cd test
$ touch foo bar
$ chflags hidden bar
$ /bin/ls -lO
total 0
-rw-r--r--@ 1 danielbeck  staff  hidden 0 25 Okt 22:25 bar
-rw-r--r--  1 danielbeck  staff  -      0 25 Okt 22:25 foo
$ $HOME/bin/ls -lO
total 0
-rw-r--r--  1 danielbeck  staff  - 0 25 Okt 22:25 foo
$ $HOME/bin/ls -A
bar foo
Daniel Beck
fuente