2 votes

Marquage automatique des fichiers dont la dernière ouverture remonte à plus de x jours

Je souhaite mettre en place un processus qui s'exécute chaque jour et identifie les fichiers qui ont été ouverts pour la dernière fois il y a x jours, puis appliquer une étiquette telle que "à revoir" à ces fichiers. Ces fichiers apparaîtraient étiquetés dans le Finder avec la couleur/étiquette appropriée et cette étiquette serait consultable.

Automator est-il la meilleure solution et, si oui, quelqu'un a-t-il un script qui fait quelque chose comme ça et auquel je puisse me référer ?

4voto

user3439894 Points 52496

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

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