Lorsqu'un fichier est étiqueté dans Recherche il dispose d'un attribut étendu sur elle :
com.apple.metadata:_kMDItemUserTags
Informations générales
La méthode la plus simple que j'ai trouvée pour appliquer un sur mesure étiquette à un fichier par programme est d'utiliser xattr
pour obtenir le valeur d'un sur mesure étiquette , pas un seul des par défaut étiquettes et l'appliquer au fichier(s) cible(s) par l'intermédiaire d'un shell script . Par exemple, j'ai créé un nouveau sur mesure étiquette nommée Révision ce qui lui donne la couleur jaune . Son hexagone est la représentation :
62706C6973743030A101585265766965770A35080A0000000000000101000000000000000200000000000000000000000000000013
Conseil : survolez la souris et faites défiler horizontalement pour voir le code complet.
Pour obtenir le valeur de la sur mesure étiquette 's com.apple.metadata:_kMDItemUserTags
attribut étendu après l'avoir réglée normalement dans Recherche l'exemple suivant commande composée a été utilisé dans Terminal , par exemple :
xattr -px com.apple.metadata:_kMDItemUserTags "/path/to/file" | tr -d '\n' | tr -d ' '
Conseil : survolez la souris et faites défiler horizontalement pour voir le code complet.
- <strong>Nota: </strong>Si l'on utilise l'exemple ci-dessus <em>commande composée </em>les <strong>rapide </strong>n'est pas renvoyée normalement et se trouve directement après l'élément <em><strong>hexagone </strong>chaîne de caractères </em>au lieu d'être sur la ligne suivante, ce qui fait que lors de la copie de l'élément <em><strong>hexagone </strong>chaîne de caractères </em>s'assurer <strong>ne pas copier </strong>l'un ou l'autre des <strong>rapide </strong>!
La sortie du xattr
commande pour voir la sortie standard serait, par exemple :
$ xattr -l "/path/to/file"
com.apple.metadata:_kMDItemUserTags:
00000000 62 70 6C 69 73 74 30 30 A1 01 58 52 65 76 69 65 |bplist00..XRevie|
00000010 77 0A 35 08 0A 00 00 00 00 00 00 01 01 00 00 00 |w.5.............|
00000020 00 00 00 00 02 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 13 |.....|
00000035
$
Conseil : survolez la souris et faites défiler horizontalement pour voir le code complet.
Toutefois, à cette fin, seule la hexagone chaîne de caractères est souhaitée, d'où l'utilisation de la -px
option auparavant, et pourquoi tuyauterie la sortie vers le tr
commande pour supprimer nouvelles lignes , \n
y espaces est nécessaire.
Application d'une balise personnalisée
Pour appliquer cette sur mesure étiquette en Terminal à un fichier pour les tests, utilisez par exemple
xattr -wx com.apple.metadata:_kMDItemUserTags '62706C6973743030A101585265766965770A35080A0000000000000101000000000000000200000000000000000000000000000013' "/path/to/file"
Conseil : survolez la souris et faites défiler horizontalement pour voir le code complet.
- <strong>Nota: </strong>Le <code>xattr</code> <em>page de manuel </em>montre un exemple de copie du <em>attribut étendu </em>d'un <em>répertoire </em>à l'autre, ce qui peut être appliqué à <em>fichiers </em>également, mais pour une solution programmatique, je préfère cette méthode. Voir aussi <code>man xargs</code> en <strong>Terminal </strong>pour plus d'informations.
Utilisation programmatique
Cela pourrait être utilisé dans un bash
script ou en Automate à l'aide d'un Exécuter le Shell script action Toutefois, le Trouver des éléments de recherche action y Éléments de recherche de filtre action en Automate a une insecte avec le Date de la dernière ouverture de la mise en place.
Il ne reste donc plus qu'à utiliser le find
commande ou le mdfind
commande ce dernier étant plus apte à trouver fichiers pour les Date de la dernière ouverture comme indiqué dans Recherche en Liste vue ou le Obtenir des informations feuille pour un fichier qui est le kMDItemLastUsedDate
attribut utilisé avec le mdfind
commande à l'aide d'un interrogation . Il convient de noter que mdfind
exige Indexation Spotlight de la cible répertoire et est activé par défaut.
En Terminal , ce commande composée exemples d'utilisation mdfind
pour localiser fichiers correspondant à la interrogation et son résultat est transmis à xargs
pour courir xattr
sur le fichiers pour appliquer la sur mesure étiquette :
mdfind -0 -onlyin "$HOME/Documents" 'kMDItemLastUsedDate > $time.today(-7) && kMDItemLastUsedDate < $time.today(-6)' | xargs -0 -I % xattr -wx com.apple.metadata:_kMDItemUserTags '62706C6973743030A101585265766965770A35080A0000000000000101000000000000000200000000000000000000000000000013' %
Conseil : survolez la souris et faites défiler horizontalement pour voir le code complet.
La façon dont cela est enveloppé dans un shell script ou en Automate à l'aide d'un Exécuter le Shell script action et programmé pour fonctionner à intervalles réguliers dépend en fait de la manière dont on entend le programmer et d'autres critères entourant la manière dont on entend prendre en compte son utilisation et d'autres contrôles afin de ne pas le laisser s'emballer, si l'on peut dire.
Je choisirais probablement d'utiliser launchd
pour le programmer en tant que bash
script et rester à l'écart des Automate Le choix de l'option de financement dépend des autres éléments que l'on souhaite intégrer dans le processus global.
À des fins de test, sous MacOS High Sierra Voici ce que j'ai fait :
1. Créer un bash
script avec l'exemple mdfind
commande composée de haut en bas.
En Terminal :
mkdir ~/bin
cd ~/bin
touch crtag
open -e crtag
Le dernier commande ci-dessus devrait, par défaut, ouvrir crtag , pour [ C ]ustom[ R Vue d'ensemble[ Étiquette ], en TextEdit dans lequel les lignes suivantes ont été ajoutées :
#!/bin/bash
mdfind -0 -onlyin "$HOME/Documents" 'kMDItemLastUsedDate > $time.today(-7) && kMDItemLastUsedDate < $time.today(-6)' | xargs -0 -I % xattr -wx com.apple.metadata:_kMDItemUserTags '62706C6973743030A101585265766965770A35080A0000000000000101000000000000000200000000000000000000000000000013' %
Conseil : survolez la souris et faites défiler horizontalement pour voir le code complet.
Sauvegarde de l'e.g. crtag et le fermer.
Retour en Terminal , a fait crtag
exécutable, par exemple :
chmod 0755 crtag
Nota: 0755
se traduit par : -rwxr-xr-x
2. Créer un PLIST fichier pour launchd
pour exécuter l'e.g. crtag
shell script tous les jours à l'heure souhaitée.
En Terminal :
cd ~/Library/LaunchAgents
touch com.my.DateLastOpenedCustomReviewTag.plist
open -e com.my.DateLastOpenedCustomReviewTag.plist
Le dernier commande ci-dessus devrait, par défaut, ouvrir com.my.DateLastOpenedCustomReviewTag.plist en TextEdit dans lequel les lignes suivantes ont été ajoutées :
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>EnvironmentVariables</key>
<dict>
<key>PATH</key>
<string>/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:</string>
</dict>
<key>Label</key>
<string>com.my.DateLastOpenedCustomReviewTag</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/path/to/script</string>
</array>
<key>RunAtLoad</key>
<false/>
<key>StartCalendarInterval</key>
<array>
<dict>
<key>Hour</key>
<integer>9</integer>
<key>Minute</key>
<integer>00</integer>
</dict>
</array>
</dict>
</plist>
Pendant le réglage /path/to/script
à l'actuel nom de chemin entièrement qualifié , par exemple /Users/me/bin/crtag
et le temps comme indiqué dans le <key>Hour</key>
, <integer>9</integer>
y <key>Minute</key>
, <integer>00</integer>
clés qui utilise 24 heures temps .
Sauvegarde de l'e.g. com.my.DateLastOpenedCustomReviewTag.plist et le fermer.
Retour en Terminal , a chargé l'e.g. com.my.DateLastOpenedCustomReviewTag.plist fichier pour launchd
pour exécuter le shell script selon ses paramètres :
launchctl load com.my.DateLastOpenedCustomReviewTag.plist
Aujourd'hui, tous les jours, par exemple 9:00 AM , le fichiers rencontrer les mdfind
interrogation aura la sur mesure étiquette qui leur sont appliqués, qui peuvent être consultés dans Recherche de la Tags sur le site de la Encadré ou d'autres Recherche les méthodes impliquant Tags .
Nota: Voir les pages du manuel dans Terminal pour mdfind
, launchd
, launchctl
, tr
, xargs
y xattr
, par exemple man mdfind
. Jetez également un coup d'œil : Syntaxe de l'expression de la requête de métadonnées de fichiers