0 votes

Argument de ligne de commande pour "find" et "grep" des données dans les attributs "xattr -l" ?

J'ai un fichier pour lequel une application a défini des attributs étendus.

$ xattr -l /Volumes/Educating\ Rita\ \(1983\)/Educating\ Rita\ \(1983\).1.eng.srt
net.filebot.filename: 3_English.srt
net.filebot.metadata: {"@type":"Movie","year":1983,"imdbId":85478,"tmdbId":38291,"language":"en","id":38291,"name":"Educating Rita","aliasNames":[]}

J'ai essayé plusieurs méthodes pour obtenir la valeur de @type à l'intérieur de l'attribut, mais je n'ai pas trouvé de moyen de rechercher ces valeurs dans plusieurs fichiers et de les renvoyer.

xattr -l /Volumes/Educating\ Rita\ \(1983\)/Educating\ Rita\ \(1983\).1.eng.srt | grep @type
net.filebot.metadata: {"@type":"Movie","year":1983,"imdbId":85478,"tmdbId":38291,"language":"en","id":38291,"name":"Educating Rita","aliasNames":[]}

Je veux trouver chaque fichier .srt et grep pour la valeur de @type . Dans les résultats ci-dessus, la commande renverrait "Movie".

$ find . -iname "*.srt" | while read -r file; do `xattr -l "$file" | grep  "Type" >> /Users/john/Desktop/filebotmeta1.txt` ; done

Cela me donne un document texte avec ce contenu :

net.filebot.metadata: {"@type":"Movie","year":1983,"imdbId":85478,"tmdbId":38291,"language":"en","id":38291,"name":"Educating Rita","aliasNames":[]}

Mais je veux revenir @type et sa valeur n'est pas le contenu entier de l'attribut.

Je ne suis pas sûr getxattr o listxattr s'appliquent à la ligne de commande. Elles semblent être réservées à un usage interne.

J'imagine que cela implique une sortie vers un fichier .tmp, puis une recherche dans le contenu de ce fichier ? Ou existe-t-il un argument d'une ligne que je puisse utiliser pour imprimer les résultats dans Terminal ?

Le contenu se présente comme suit json format.

2voto

Seamus Points 3171

Si vous pouviez être sûr que le dossier était JSON il pourrait y avoir une meilleure façon de procéder, mais il vous faudrait probablement connaître la structure du format JSON des dossiers.

Cependant, si je comprends bien votre question, je pense que vous pouvez obtenir ce que vous voulez avec grep si vous utilisez le -o o --only-matching (voir man grep pour plus de détails)

# create a string 'STRINGX' to test a regex
% STRINGX='net.filebot.metadata: {"@type":"Movie","year":1983,"imdbId":85478,"tmdbId":38291,"language":"en","id":38291,"name":"Educating Rita","aliasNames":[]}'

# try a regex that includes '"@type": plus an alphanumeric string that follows
% echo $STRINGX | grep -o '\"@type\":\"[a-zA-Z0-9]*\"'

# which yields this as output:
"@type":"Movie"

# to print only the value of @type, one option is to use sed:
% echo $STRINGX | grep -o '\"@type\":\"[a-zA-Z0-9]*\"' | sed 's/^.\{8\}//' 
"Movie" 

Donc - pipe votre xattr -l à la sortie du grep comme indiqué ci-dessus.

Il est possible que vous puissiez faire un meilleur travail sur la regex car je ne sais pas s'il existe des règles définissant des caractéristiques telles que la longueur maximale, la présence de caractères spéciaux, etc.

Faites-nous savoir comment cela fonctionne, ou si vous avez des questions, et nous essaierons d'y répondre.

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