Command line argument to "find" and "grep" data inside "xattr -l" atrributes?
I have a file that an application has set extended attributes for.
$ 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":[]}
I have tried a few different ways to get the value of @type
inside the attribute but haven't found a way to search multiple files and grep for and return those values.
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":[]}
I want to find every .srt file and grep
for the value of @type
. In the above results the command would return "Movie".
$ find . -iname "*.srt" | while read -r file; do `xattr -l "$file" | grep "Type" >> /Users/john/Desktop/filebotmeta1.txt` ; done
That gives me a text document with this content:
net.filebot.metadata: {"@type":"Movie","year":1983,"imdbId":85478,"tmdbId":38291,"language":"en","id":38291,"name":"Educating Rita","aliasNames":[]}
But I want to return @type
and it's value not the entire contents of the attribute.
I am not sure getxattr
or listxattr
apply to the command line. They seem to be for internal use only.
I imagine this involves outputting to a .tmp file and then grepping the contents of the file? Or, is there a one line argument I can use to print results in Terminal?
The contents look like json
format.
If you could be sure the file were JSON
format, there might be a better way to do this, but you'd probably need to know something of the structure of the JSON
records.
However, if I understand your question correctly, I think you can get what you want with grep
if you use the -o
or --only-matching
option (see man grep
for details)
# 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"
So - pipe
your xattr -l
output to the grep
command as shown above.
You may be able to do a better job on the regex
as I don't know if there are any rules that define characteristics such as maximum length, or presence of special characters, etc.
Let us know how this works, or if you have questions & we'll try to answer.