Rendre conscient le drapeau "caché" du fichier

11

Est-il possible de mettre en lsévidence l' hiddenindicateur de fichier sur Mac OS X?

Actuellement, un simple ls -lOproduit:

$ 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

Nous avons donc trois types de visibilité: les fichiers normaux visibles, les fichiers avec l' hiddenindicateur de fichier, qui ne sont pas cachés dans Terminal, et les fichiers très masqués dont le nom commence par un point.

Est - il possible, par exemple en utilisant un alias ou une fonction shell fiable, de faire lstraiter hiddensignalées et les .dothiddenfichiers de la même, à savoir cache par défaut et montrer avec ls -Aou ls -asimilaire à la façon dont Finder se comporte en fonction de la valeur defaults read com.apple.Finder AppleShowAllFiles?

Je suis conscient que man chflagsmentionne hiddenuniquement le drapeau se cache de l'interface graphique, à savoir le Finder.

Daniel Beck
la source

Réponses:

8

Voici les étapes à suivre pour obtenir un OS X lsqui masque les fichiers avec l' indicateur masqué , à moins que l' -a/-Aoption ne soit spécifiée, similaire aux fichiers dot.

  1. Installez Xcode. J'utilise Xcode 4.5.1 ci-dessous.
  2. Téléchargez les versions de votre système d'exploitation libutilet à file_cmdspartir de http://www.opensource.apple.com . Il y a un bouton de téléchargement sur le côté droit de chaque entrée de la liste de paquets. Ce guide a été écrit pour OS X 10.8.2, YMMV avec les étapes exactes ci-dessous si vous utilisez une version différente.
  3. Extraire les deux archives.
  4. Ouvrez le file_cmds.xcodeprojdans Xcode et sélectionnez pour construire la lscible.

    Capture d'écran

  5. Sélectionnez le file_cmdsprojet Xcode à gauche et sélectionnez la lscible dans la zone principale. Dans l' onglet Paramètres de construction , recherchez les chemins de recherche d'en-tête dans la catégorie En- têtes et ajoutez le chemin d'accès au dossier où vous l'avez extrait libutil.

    Capture d'écran

  6. Ouvrez le fichier print.cdans le lsdossier de gauche et supprimez la ligne mentionnée #include <membershipPriv.h>. Enregistrez le fichier par la suite. Cela devrait casser quelque chose, car les includes sont là pour une raison, mais je n'ai pas encore déterminé ce que c'est.

  7. Ouvrez le fichier ls.cdans le même dossier et cherchez un commentaire /* Only display dot file if -a/-A set. */dans la displayfonction. Remplacez-le et la condition ci-dessous par ce qui suit:

    /* 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. Appuyez sur Cmd- Bpour construire.

    Succès!

  9. Sélectionnez Produits à gauche (fin de la liste des dossiers) et cliquez avec le bouton droit de la souris ls. Sélectionnez Afficher dans le Finder .

    Capture du dossier Build Output

  10. Déplacez l' lsexécutable dans un endroit pratique, par exemple votre répertoire personnel. Ouvrez ensuite Terminal et exécutez-le sudo mv $HOME/ls /bin/ls, ou mieux encore, créez un nouveau dossier nommé bindans votre répertoire personnel et déplacez-le là-bas. Ajoutez ce dossier à votre PATHsuite.

Tester le résultat:

$ 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
la source