Rendere consapevole del flag di file "nascosto"


12

È possibile lsconoscere il hiddenflag di file su Mac OS X?

Attualmente, un semplice 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

Quindi abbiamo tre tipi di visibilità: file regolari e visibili, file con il hiddenflag di file, che in realtà non sono nascosti in Terminal e file davvero nascosti i cui nomi iniziano con un punto.

Esiste un modo, ad esempio l'uso di un alias o di una funzione shell affidabile, per fare in modo che lsi messaggi hiddencontrassegnati e i .dothiddenfile siano trattati allo stesso modo, ovvero nascondersi per impostazione predefinita e mostrare con ls -Ao ls -a, in modo simile al modo in cui Finder si comporta in base al valore di defaults read com.apple.Finder AppleShowAllFiles?

Sono consapevole che man chflagsmenziona specificamente la hiddenbandiera si nasconde solo dalla GUI, ovvero Finder.

Risposte:


8

Questi sono i passaggi per ottenere un OS X lsche nasconda i file con il flag nascosto a meno che non -a/-Asia specificata l' opzione, simile ai file dot.

  1. Installa Xcode. Sto usando Xcode 4.5.1 di seguito.
  2. Scarica le versioni del tuo sistema operativo libutile file_cmdsda http://www.opensource.apple.com . C'è un pulsante di download sul lato destro di ogni voce dell'elenco dei pacchetti. Questa guida è stata scritta per OS X 10.8.2, YMMV con i passaggi esatti seguenti se si utilizza una versione diversa.
  3. Estrai entrambi gli archivi.
  4. Apri file_cmds.xcodeprojin Xcode e seleziona per creare il lstarget.

    Immagine dello schermo

  5. Seleziona il file_cmdsprogetto Xcode a sinistra e seleziona il lstarget nell'area principale. Nella scheda Impostazioni build , cerca Percorsi di ricerca intestazione nella categoria Intestazioni e aggiungi il percorso alla cartella in cui hai estratto libutil.

    Immagine dello schermo

  6. Apri il file print.cnella lscartella a sinistra e rimuovi la riga che dice #include <membershipPriv.h>. Salva il file in seguito. Questo dovrebbe rompere qualcosa, perché le inclusioni sono lì per un motivo, ma non ho ancora determinato di cosa si tratti.

  7. Apri il file ls.cnella stessa cartella e cerca un commento che dice /* Only display dot file if -a/-A set. */nella displayfunzione. Sostituirlo e le condizioni sottostanti con quanto segue:

    /* 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. Premi Cmd- Bper costruire.

    Successo!

  9. Seleziona Prodotti a sinistra (fine dell'elenco delle cartelle) e fai clic con il tasto destro ls. Seleziona Mostra nel Finder .

    Crea screenshot della cartella di output

  10. Sposta l' lseseguibile in un posto comodo, ad esempio la tua home directory. Quindi apri Terminal ed esegui sudo mv $HOME/ls /bin/ls, o, ancora meglio, crea una nuova cartella denominata binnella tua home directory e spostala lì. Aggiungi quella cartella in PATHseguito.

Test del risultato:

$ 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.