0 votes

Comment lister dans le Terminal uniquement les fichiers visibles dans le Finder ?

Je sais comment afficher les fichiers cachés dans le Finder. Ce que j'aimerais faire, c'est lister les fichiers dans le shell/Terminal selon les mêmes critères que ceux utilisés par le Finder pour les fichiers cachés. (Mon objectif est de collecter des mesures à l'aide d'un cronjob/launchd script qui sont cohérentes avec ce qui apparaît dans l'interface utilisateur).

Cela s'avère plus difficile qu'il n'y paraît. Voici un exemple des moyens que je connais pour cacher un fichier du Finder (Big Sur 11.6, Apple Silicon, APFS) :

mkdir test
cd test
touch regular hidden invisible .dotfile
SetFile -a V invisible
chflags nohidden invisible
chflags hidden hidden

Cette disposition exige que SetFile qui est disponible avec les outils de développement.

Le résultat attendu de la commande ou du script est un fichier, regular . Les trois autres fichiers ne sont pas visibles dans le Finder dans des circonstances normales. J'aimerais que la solution ne nécessite que des outils natifs (pas de Developer Tools ou de gnu coreutils/homebrew et autres).

Jusqu'à présent, mon approche consisterait à parcourir en boucle tous les fichiers produits par ls -lO | awk 'NR!=1 && $5!~/hidden/ { print $0 }' (cela permet de filtrer les dotfiles et les hidden ), et utiliser GetFileInfo (un autre outil de développement installé à côté de SetFile ) pour filtrer l'attribut invisible. Cependant, cela nécessite l'installation de Developer Tools, dont je préférerais éviter la dépendance, et semble également maladroit et excessivement compliqué - et probablement aussi inefficace s'il y a des milliers de fichiers dans un répertoire.

Je pense que les autres options seraient d'analyser manuellement la sortie de xattr -px com.apple.FinderInfo invisible (plus compliqué mais qui évite le GetFileInfo ) ou d'utiliser osascript d'utiliser d'une manière ou d'une autre la logique existante du Finder au lieu d'essayer de la réimplémenter à l'aide d'outils BSD.

Editer : Étant donné qu'apparemment certains utilisateurs setfile pour activer le drapeau caché, j'ai ajouté chflags nohidden invisible au cas de test car il est tout à fait probable que le système de fichiers contienne des fichiers (créés par d'autres moyens) qui n'ont que l'attribut étendu FinderInfo et qui n'ont pas l'attribut BSD file.

1voto

OnePablo Points 1

J'ai d'abord posté un commentaire sur la possibilité que cela produise le résultat souhaité, bien que je n'aie pas été en mesure de tester moi-même à ce moment-là. Cependant, l'OP a confirmé que, sur son système (Big Sur 11.6, Apple Sillicon, APFS) la commande suivante renvoie le contenu d'un répertoire qui correspond à ce qui est visible dans un fichier Recherche qui est ouverte et qui pointe sur le chemin d'accès au répertoire :

tell application id ("com.apple.systemevents") ¬
        to get every item in the folder named ¬
        "/path/to/folder" where it is visible

Cela renvoie un list de file y folder qui se résolvent beaucoup plus rapidement que les Recherche les références des dossiers. Il sera encore plus performant si l'on récupère une liste de chemins d'accès aux fichiers à la place :

tell application id ("com.apple.systemevents") ¬
        to get the POSIX path of every item in ¬
        folder "/path/to/folder" whose visible ¬
        is true

Depuis Événements du système accepte de simples chemins d'accès à la place des références de fichiers en tant que paramètres dans un grand nombre de ses commandes (par ex. move , delete ), cela peut accélérer considérablement les choses et, dans la plupart des cas, sera infiniment plus rapide que Recherche sans la bloquer.

Si vous avez besoin d'un alias list afin d'utiliser les commandes disponibles uniquement par l'intermédiaire de l'application Recherche , par exemple reveal alors † :

tell application id ("com.apple.systemevents") ¬
        to get every alias in the folder named ¬
        "/path/to/folder" where it is visible

tell application id ("com.apple.Finder") ¬
        to get the result as alias list

† à confirmer

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X