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.