Tornando ls ciente do sinalizador de arquivo "oculto"

12

É possível tomar lsconhecimento do hiddensinalizador de arquivo no Mac OS X?

Atualmente, um simples ls -lOproduz:

$ 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

Portanto, temos três tipos de visibilidade: arquivos regulares e visíveis, arquivos com o hiddensinalizador de arquivo que não estão ocultos no Terminal e arquivos realmente ocultos cujos nomes começam com um ponto.

Existe uma maneira, por exemplo, de usar um alias ou uma função confiável do shell, para tornar o lstratamento hiddensinalizado e os .dothiddenarquivos iguais, ou seja, ocultar por padrão e mostrar com ls -Aou ls -asemelhante à maneira como o Finder se comporta dependendo do valor de defaults read com.apple.Finder AppleShowAllFiles?

Estou ciente de que man chflagsmenciona especificamente a hiddenflag apenas oculta da GUI, ou seja, o Finder.

Daniel Beck
fonte

Respostas:

8

Estas são as etapas para obter um OS X lsque oculte arquivos com o sinalizador oculto , a menos que a -a/-Aopção seja especificada, semelhante aos arquivos de ponto.

  1. Instale o Xcode. Estou usando o Xcode 4.5.1 abaixo.
  2. Faça o download das versões do seu sistema operacional libutile file_cmdsem http://www.opensource.apple.com . Há um botão de download no lado direito de cada entrada da lista de pacotes. Este guia foi escrito para o OS X 10.8.2, YMMV, com as etapas exatas abaixo se você estiver em uma versão diferente.
  3. Extraia os dois arquivos.
  4. Abra o file_cmds.xcodeprojno Xcode e selecione para construir o lsdestino.

    Captura de tela

  5. Selecione o file_cmdsprojeto Xcode à esquerda e selecione o lsdestino na área principal. Na guia Configurações da compilação , procure Caminhos de pesquisa de cabeçalho na categoria Cabeçalhos e adicione o caminho à pasta na qual você extraiu libutil.

    Captura de tela

  6. Abra o arquivo print.cna lspasta à esquerda e remova a linha que diz #include <membershipPriv.h>. Salve o arquivo depois. Isso deve quebrar alguma coisa, porque inclui existem por uma razão, mas ainda não determinei o que é.

  7. Abra o arquivo ls.cna mesma pasta e procure um comentário dizendo /* Only display dot file if -a/-A set. */na displayfunção. Substitua-o e a condição abaixo dele pelo seguinte:

    /* 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. Pressione Cmd- Bpara construir.

    Sucesso!

  9. Selecione Produtos à esquerda (final da lista de pastas) e clique com o botão direito do mouse ls. Selecione Mostrar no localizador .

    Imagem da pasta Build Output

  10. Mova o lsexecutável para algum lugar conveniente, por exemplo, seu diretório pessoal. Em seguida, abra o Terminal e execute sudo mv $HOME/ls /bin/ls, ou, melhor ainda, crie uma nova pasta chamada binno diretório inicial e mova-a para lá. Adicione essa pasta ao seu PATHdepois.

Testando o 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
fonte