De acordo com a página de manual ls , você deve poder -O
combinar a -l
opção com a opção de exibir sinalizadores com ls. Por exemplo:
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: Apenas para fornecer uma solução mais específica para o que o OP queria (veja os comentários abaixo): Para verificar se uma pasta está oculta ou não, podemos passar a -a
opção para ls para visualizar a própria pasta. Podemos então canalizar a saída sed -n 2p
(graças ao Stack Overflow ) para obter a linha necessária dessa saída. Um exemplo:
mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .
Edit 2: Para um comando que deve funcionar independentemente de ser um arquivo ou uma pasta, precisamos fazer algo um pouco mais hacky.
A linha de saída necessária ls -al
varia de acordo com a coisa ser um arquivo ou uma pasta, pois as pastas mostram uma contagem total, enquanto os arquivos não. Para contornar isso, podemos cumprimentar o personagem r
. Isso deve estar em ~ todos os arquivos / pastas (quase todos devem ter pelo menos uma permissão de leitura), mas não na linha de totais.
Como a linha que queremos obter se torna a primeira, podemos usar head -n 1
a primeira (alternativa, se você preferir o sed, sed -n 1p
pode ser usada).
Então, por exemplo, com um diretório:
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 .
e com um arquivo:
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
Edit 3: Veja a resposta de Tyilo abaixo para uma maneira melhor do que grepping para r
:)
ls -Ol fooDir/ | grep hidden
) para visualizar apenas arquivos / pastas ocultos. Isso ainda mostrará todos os arquivos, mas se você passar por alguma mágica sed / awk (alguém mais terá que ajudar aqui, receio), você poderá obter apenas uma lista de arquivos.-a
opção a ls. Para obter a linha que você precisa da saída, use sed. Por exemplo:ls -aOl foo | sed -n 2p
. Isso exibirá uma linha de saída. Se ele contiver a palavra "oculto", então foo está oculto. Caso contrário, foo não está oculto. :)ls -Old dirname/
mostrará as propriedades do próprio diretório, não seu conteúdo.Encontre a solução aqui: Como posso fazer com que o ls mostre informações apenas sobre o diretório especificado, não informações sobre seus subarquivos ou conteúdo da pasta?
O que basicamente é
ls -ldO foo
e então você apenas anexa| awk '{ print $5 }'
para que ele exiba as informações.fonte
stat
.Conforme referenciado por @Tyilo , o @Sorpigal sugere tentar
stat
, que codifica "sinalizadores de usuário" com%Xf
(ele codifica X usuário f lag) e é muito mais seguro para a análise de máquinas.Os valores hexadecimais para bandeiras de usuários viver aqui:
grep UF /usr/include/sys/stat.h
. No macOS 10.11:fonte