0 votos

¿Argumento de línea de comandos para "encontrar" y "grep" datos dentro de los atritos de "xattr -l"?

Tengo un archivo al que una aplicación le ha puesto atributos extendidos.

$ 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":[]}

He probado varias formas de obtener el valor de @type dentro del atributo, pero no he encontrado la manera de buscar en varios archivos y buscar y devolver esos valores.

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":[]}

Quiero encontrar todos los archivos .srt y grep para el valor de @type . En los resultados anteriores, el comando devolvería "Película".

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

Eso me da un documento de texto con este contenido:

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

Pero quiero volver @type y su valor no el contenido completo del atributo.

No estoy seguro getxattr o listxattr se aplican a la línea de comandos. Parece que sólo son para uso interno.

Me imagino que esto implica la salida a un archivo .tmp y luego grepping el contenido del archivo? O, ¿hay un argumento de una línea que puedo utilizar para imprimir los resultados en la Terminal?

El contenido es el siguiente json formato.

2voto

Joel Puntos 112

Si pudiera estar seguro de que el archivo fuera JSON podría haber una forma mejor de hacerlo, pero probablemente se necesitaría conocer algo de la estructura del JSON registros.

Sin embargo, si entiendo bien tu pregunta, creo que puedes conseguir lo que quieres con grep si utiliza el -o o --only-matching (ver man grep para más detalles)

# 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" 

Entonces pipe su xattr -l salida a la grep como se muestra arriba.

Es posible que pueda hacer un mejor trabajo en el regex ya que no sé si hay reglas que definan características como la longitud máxima, o la presencia de caracteres especiales, etc.

Díganos cómo funciona, o si tiene alguna pregunta y trataremos de responder.

0 votos

@John: specific Apple binary... Ummm - no me hagas empezar, por favor :)

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X