De acuerdo con la página de manual de ls , debería poder la -O
opción combinada con la -l
opción de ver banderas con ls. Por ejemplo:
ls -Ol foo.txt
-rw-r--r-- 1 harry staff - 0 18 Aug 19:11 foo.txt
chflags hidden foo.txt
ls -Ol foo.txt
-rw-r--r-- 1 harry staff hidden 0 18 Aug 19:11 foo.txt
chflags nohidden foo.txt
ls -Ol foo.txt
-rw-r--r-- 1 harry staff - 0 18 Aug 19:11 foo.txt
Editar: solo para dar una solución más específica a lo que quería el OP (ver comentarios a continuación): para ver si una carpeta está oculta o no, podemos pasar la -a
opción a ls para ver la carpeta en sí. Luego podemos canalizar la salida sed -n 2p
(gracias a Stack Overflow ) para obtener la línea requerida de esa salida. Un ejemplo:
mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
Edición 2: para un comando que debería funcionar independientemente de si se trata de un archivo o una carpeta, debemos hacer algo un poco más hacky.
La línea de salida necesaria ls -al
varía dependiendo de si se trata de un archivo o una carpeta, ya que las carpetas muestran un recuento total, mientras que los archivos no. Para evitar esto, podemos buscar al personaje r
. Esto debería estar en ~ todos los archivos / carpetas (casi todos deberían tener al menos un permiso de lectura), pero no en la línea de totales.
Como la línea que queremos obtener se convierte en la primera línea, podemos usarla head -n 1
para obtener la primera línea (alternativa, si prefiere sed, sed -n 1p
podría usarse).
Entonces, por ejemplo con un directorio:
mkdir foo
chflags hidden foo
ls -aOl foo | grep r | head -n 1
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
y con un archivo:
touch foo.txt
chflags hidden foo.txt
ls -aOl foo.txt | grep r | head -n 1
-rw-r--r-- 1 harry staff hidden 0 18 Aug 19:11 foo.txt
Edición 3: Vea la respuesta de Tyilo a continuación para una forma más agradable que grepping r
:)