Selon la page de manuel ls , vous devriez pouvoir -O
combiner l' -l
option avec l' option pour afficher les indicateurs avec ls. Par exemple:
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
Edit: Juste pour donner une solution plus spécifique à ce que l'OP voulait (voir les commentaires ci-dessous): Pour voir si un dossier est caché ou non, nous pouvons passer l' -a
option à ls pour afficher le dossier lui-même. Nous pouvons ensuite diriger la sortie vers sed -n 2p
(merci Stack Overflow ) pour obtenir la ligne requise de cette sortie. Un exemple:
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: Pour une commande qui devrait fonctionner, qu'il s'agisse d'un fichier ou d'un dossier, nous devons faire quelque chose d'un peu plus hacky.
La ligne de sortie requise ls -al
varie selon qu'il s'agit d'un fichier ou d'un dossier, car les dossiers affichent un nombre total, contrairement aux fichiers. Pour contourner cela, nous pouvons chercher le personnage r
. Cela devrait être dans ~ tous les fichiers / dossiers (presque tous devraient avoir au moins une autorisation de lecture), mais pas dans la ligne des totaux.
Comme la ligne que nous voulons obtenir devient alors la première ligne, nous pouvons utiliser head -n 1
pour obtenir la première ligne (une alternative, si vous préférez sed, sed -n 1p
pourrait être utilisée).
Ainsi, par exemple avec un répertoire:
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 .
et avec un fichier:
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: Voir la réponse de Tyilo ci-dessous pour une meilleure façon que de chercher r
:)
ls -Ol fooDir/ | grep hidden
) pour afficher uniquement les fichiers / dossiers cachés. Cela montrera toujours tous les fichiers, mais si vous le faites passer par une magie sed / awk (quelqu'un d'autre devra m'aider ici, je le crains), vous devriez pouvoir obtenir juste une liste de fichiers.-a
option à ls. Pour obtenir simplement la ligne dont vous avez besoin à partir de la sortie, vous pouvez utiliser sed. Par exemple:ls -aOl foo | sed -n 2p
. Cela affichera une ligne de sortie. S'il contient le mot "caché", alors foo est caché. Si ce n'est pas le cas, foo n'est pas caché. :)ls -Old dirname/
vous montrera les propriétés du répertoire lui-même, pas son contenu.J'ai trouvé la solution ici: comment faire pour que ls affiche des informations sur le répertoire spécifié uniquement, pas des informations sur ses sous-fichiers ou le contenu du dossier?
Ce qui est fondamentalement
ls -ldO foo
et ensuite vous ajoutez juste| awk '{ print $5 }'
pour lui faire afficher les informations.la source
stat
.Comme référencé par @Tyilo , @Sorpigal suggère d'essayer
stat
, qui code les "drapeaux utilisateur" avec%Xf
(il a encodé X f utilisateur ), et est beaucoup plus sûr pour l'analyse de la machine.Les valeurs hexagonales pour les drapeaux utilisateur vivent ici:
grep UF /usr/include/sys/stat.h
. Depuis macOS 10.11:la source