Indica se una cartella / file è nascosto in Mac OS X.


10

So che puoi impostare o annullare il flag nascosto di una cartella / file facendo chflags hidden foo.txte chflags nohidden foo.txt.

Ma c'è comunque modo di dire se la cartella / file è attualmente nascosta o no?

Non voglio solo determinare se la cartella / file inizia con un punto.

Risposte:


10

Secondo la pagina man ls , dovresti essere in grado di -Ocombinare l' -lopzione con l' opzione per visualizzare i flag con ls. Per esempio:

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

Modifica: solo per dare una soluzione più specifica a ciò che l'OP voleva (vedi commenti sotto): per vedere se una cartella è nascosta o meno, possiamo passare l' -aopzione a ls per visualizzare la cartella stessa. Possiamo quindi reindirizzare l'output in sed -n 2p(grazie Stack Overflow ) per ottenere la linea richiesta di tale output. Un esempio:

mkdir foo
chflags hidden foo
ls -aOl foo | sed -n 2p
drwxr-xr-x@ 2 harry staff hidden 68 18 Aug 19:11 .

Modifica 2: per un comando che dovrebbe funzionare indipendentemente dal fatto che sia un file o una cartella, dobbiamo fare qualcosa di leggermente più complicato.

La linea di output necessaria ls -alvaria a seconda che si tratti di un file o di una cartella, poiché le cartelle mostrano un conteggio totale, mentre i file no. Per ovviare a questo, possiamo chiedere il personaggio r. Questo dovrebbe essere in ~ tutti i file / cartelle (quasi tutti dovrebbero avere almeno un permesso di lettura), ma non nella riga dei totali.

Poiché la linea che vogliamo ottenere diventa la prima linea, possiamo usare head -n 1per ottenere la prima linea (in alternativa, se preferisci sed, sed -n 1ppotresti usare).

Quindi, ad esempio con una directory:

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 con un file:

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

Modifica 3: vedi la risposta di Tyilo di seguito per un modo migliore rispetto al grepping per r:)


Ma facendo questo con una cartella, elencherò le bandiere per i file / cartelle sottostanti
Tyilo

Per visualizzare solo i file nascosti, instradalo attraverso grep (ad esempio ls -Ol fooDir/ | grep hidden) per visualizzare solo file / cartelle nascosti. Questo mostrerà comunque tutti i file, ma se lo installi attraverso un po 'di magia sed / awk (qualcun altro dovrà aiutare qui, temo) dovresti essere in grado di ottenere solo un elenco di file.

Non voglio un elenco dei file che voglio solo sapere se la cartella "pippo" è nascosta o meno
Tyilo

Ok. Quindi per visualizzare la directory stessa aggiungi l' -aopzione a ls. Per ottenere la linea di cui hai bisogno dall'output, puoi usare sed. Ad esempio: ls -aOl foo | sed -n 2p. Questo visualizzerà una riga di output. Se contiene la parola "nascosto", allora foo è nascosto. In caso contrario, foo non è nascosto. :)

2
L'uso ls -Old dirname/mostra le proprietà della directory stessa, non il suo contenuto.
bahamat,

7

Ho trovato la soluzione qui: Come posso fare per mostrare solo informazioni sulla directory specificata, non informazioni sui suoi sotto-file o contenuti della cartella?

Che fondamentalmente è ls -ldO fooe quindi basta aggiungere | awk '{ print $5 }'per farlo visualizzare le informazioni.


1
Tieni presente che awk si interromperà se nel nome utente o nel nome gruppo è presente uno spazio bianco (che dovrebbe essere estremamente improbabile, ma ehi). Ho aggiunto una soluzione più sicura che utilizza stat.
sig.

1

Come riferito da @Tyilo , @Sorpigal suggerisce di provare stat, che codifica "flag utente" con %Xf(ha codificato X f lag utente ), ed è molto più sicuro per l'analisi della macchina.

$ stat -f "%Xf" ~/Library
8000

I valori esadecimali per le bandiere degli utenti vivono qui: grep UF /usr/include/sys/stat.h. A partire da macOS 10.11:

#define UF_SETTABLE     0x0000ffff  /* mask of owner changeable flags */
#define UF_NODUMP       0x00000001  /* do not dump file */
#define UF_IMMUTABLE    0x00000002  /* file may not be changed */
#define UF_APPEND       0x00000004  /* writes to file may only append */
#define UF_OPAQUE       0x00000008  /* directory is opaque wrt. union */
/* #define UF_NOUNLINK  0x00000010 */   /* file may not be removed or renamed */
#define UF_COMPRESSED   0x00000020  /* file is hfs-compressed */
/* UF_TRACKED is used for dealing with document IDs.  We no longer issue
   notifications for deletes or renames for files which have UF_TRACKED set. */
#define UF_TRACKED      0x00000040
#define UF_HIDDEN       0x00008000  /* hint that this item should not be */
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.