0 votos

¿Cómo listar en el Terminal sólo los archivos visibles en el Finder?

Sé cómo ver los archivos ocultos en el Finder. En cambio, lo que me gustaría hacer es listar los archivos en el shell/Terminal por el mismo criterio que el Finder utiliza para los archivos que están ocultos. (Mi objetivo es recolectar métricas usando un cronjob/lanzamiento de script que sean consistentes con lo que aparece en la UI).

Esto está resultando más difícil de lo que parece. Aquí hay un caso de ejemplo de las formas que conozco para ocultar un archivo del Finder (Big Sur 11.6, Apple Silicon, APFS):

mkdir test
cd test
touch regular hidden invisible .dotfile
SetFile -a V invisible
chflags nohidden invisible
chflags hidden hidden

Esto requiere que SetFile que está disponible con las Herramientas para Desarrolladores.

El resultado esperado del comando o script es un archivo, regular . Los otros tres archivos no son visibles en el Finder en las circunstancias habituales. Me gustaría que la solución sólo requiriera herramientas nativas (no Developer Tools o gnu coreutils/homebrew y similares).

Hasta ahora, mi enfoque sería hacer un bucle a través de todos los archivos emitidos por ls -lO | awk 'NR!=1 && $5!~/hidden/ { print $0 }' (esto filtra los archivos de puntos y el hidden ), y utilizar GetFileInfo (otra herramienta para desarrolladores instalada junto a SetFile ) para filtrar el atributo invisible. Sin embargo, esto requiere que se instalen las Herramientas para Desarrolladores, de las que preferiría evitar la dependencia, y también parece incómodo y excesivamente complicado--y probablemente también ineficiente si hay miles de archivos en un directorio.

Sospecho que las otras opciones serían analizar manualmente la salida de xattr -px com.apple.FinderInfo invisible (más complicada pero que evita el GetFileInfo dependencia) o utilizar osascript para utilizar de alguna manera la lógica existente del Finder en lugar de intentar reimplementarla utilizando herramientas BSD.

Editar: Dado que aparentemente los usuarios setfile comandos establecen la bandera oculta, añadí chflags nohidden invisible al caso de prueba, ya que es totalmente probable que el sistema de archivos contenga archivos (creados por otros medios) que sólo tienen el atributo extendido FinderInfo flag y no tienen el BSD file flag.

1voto

qarma Puntos 71

Originalmente publicado como un comentario en la posibilidad de que esto podría producir el resultado requerido, aunque no era capaz de probar a mí mismo en el momento. Sin embargo, el OP confirmó que, en su sistema (Big Sur 11.6, Apple Sillicon, APFS) el siguiente comando devuelve el contenido de un directorio que coincide con lo que es visible en un Buscador que se abre y apunta a la ruta del directorio:

tell application id ("com.apple.systemevents") ¬
        to get every item in the folder named ¬
        "/path/to/folder" where it is visible

Esto devuelve un list de file y folder referencias que se resuelven mucho más rápido que Buscador referencias de archivos. El rendimiento será aún mayor si se recupera una lista de rutas de archivos en su lugar:

tell application id ("com.apple.systemevents") ¬
        to get the POSIX path of every item in ¬
        folder "/path/to/folder" whose visible ¬
        is true

Desde Eventos del sistema acepta rutas simples de archivos en lugar de referencias de archivos como parámetros en muchos de sus comandos (por ejemplo move , delete etc.), esto puede acelerar las cosas dramáticamente, y en la mayoría de los casos, será infinitamente más rápido que Buscador sin bloquearlo.

Si necesita un alias list para hacer uso de los comandos sólo disponibles a través de Buscador Por ejemplo reveal entonces † :

tell application id ("com.apple.systemevents") ¬
        to get every alias in the folder named ¬
        "/path/to/folder" where it is visible

tell application id ("com.apple.Finder") ¬
        to get the result as alias list

† tbc

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