¿Alguien sabe si es posible editar directamente metadatos de archivos en OS X. Específicamente en perl. El parámetro que estoy intentando cambiar específicamente es kMDItemFSLabel
(El color del archivo). He tenido una búsqueda y parece que no puedo encontrar una manera de hacerlo sin usar un módulo como Mac::Glue o una aplicación externa (Finder).¿Cómo puedo editar los metadatos de archivos en OS X?
Respuesta
El atributo kMDItemFSLabel
es propiedad del Finder. Debe usar una forma de comunicarse con el Finder para cambiar sus datos. Por lo que yo sé, no hay nada que puedas mezclar con Perl para cambiar los datos del Finder sin pasar por el Buscador.
Hay varias maneras de hacer esto:
Uso CamelBones cuando la nueva versión sale. Eso permite un puente al Objetivo C desde Perl. Entonces necesitarás usar el método de Apple con llamadas al sistema Cocoa. empinada curva de aprendizaje para cacao ...
Si tiene herramientas de desarrollo, uso/Developer/Herramientas/SetFile (si es que se apoya el elemento de metadatos)
Uso osascript para enviar el mensaje al Finder para cambiar el color del archivo. Puede consultar this publicaciones anteriores de SO para obtener sugerencias sobre cómo hacerlo.
La mayoría de los puentes relacionados con Perl C/Cocoa han muerto por desgracia. MacPerl no se ha actualizado desde 2005.
Casi todos los métodos más sencillos requieren conocer al menos una cantidad mínima de Applescript y llamar al texto de ese script mediante una llamada de tipo interpolado al osascript.
En su forma 1 línea, osascript hace Perl lucir bella:
osascript -e 'tell application "Finder"' -e "activate" -e "display dialog \"hello\"" -e 'end tell'
Para utilizar osascript de Perl, la mayoría utiliza un documento AQUÍ. Hay ejemplos de I book que he llamado Applescript - The Definitive Guide y de brian d foy on Controlling iTunes with Perl.
Aquí es un script en Perl que escribí para el ajuste de color de archivos utilizando osascript:
#!/usr/bin/perl
use strict; use warnings;
use File::Spec;
use String::ShellQuote;
sub osahere {
my $rtr;
my $scr='osascript -ss -e '."'".join ('',@_)."'";
open my $fh, '-|', $scr or die "death on osascript $!";
$rtr=do { local $/; <$fh> };
close $fh or die "death on osascript $!";
return $rtr;
}
sub set_file_color {
# -- No color = 0
# -- Orange = 1
# -- Red = 2
# -- Yellow = 3
# -- Blue = 4
# -- Purple = 5
# -- Green = 6
# -- Gray = 7
my $file=shift;
my $color=shift || 0;
$color=0 if $color<0;
$color=7 if $color>7;
$file=File::Spec->rel2abs($file)
unless File::Spec->file_name_is_absolute($file);
$file=shell_quote($file);
return undef unless -e $file;
my $rtr=osahere <<"END_SET_COLOR" ;
tell application "Finder"
set f to "$file"
set ItemToLabel to POSIX file f as alias
set the label index of ItemToLabel to $color
end tell
END_SET_COLOR
return $rtr;
}
set_file_color("2591.txt",2);
Si el color Finder es 0, kMDItemFSLabel
es 0. Si hay algún juego de colores, kMDItemFSLabel
se convierte en 8 colores. es decir, la etiqueta "naranja" es label index
1, kMDItemFSLabel
= 7; la etiqueta "roja" es label index
2, kMDItemFSLabel
= 6; y así.
No hay una función incorporada en Perl para operar en los metadatos del sistema de archivos Mac. O bien utiliza una biblioteca de CPAN, o la escribe usted mismo, probablemente no tan bien como lo hizo el autor de la de CPAN.
En realidad no es tan complicado de implementar. Puede utilizar el comando xattr
como se muestra en la cadena de documentación a continuación ... me he envuelto la función básica de un script en Python que se aplica colores con nombre a una serie de archivos ...
#!/usr/bin/env python
"""
==================================
LABELCOLOR.PY - Colorize Finder labels of files
Usage:
labelcolor.py [color] *.jpg
where color is a name or abbreviation as defined below:
clear (c), gray (a), green (g), purple (p),
blue (b), yellow (y), red (r), orange (o)
The shell command used is:
xattr -wx com.apple.FinderInfo \
0000000000000000000400000000000000000000000000000000000000000000 myfile.txt
where 04 in the middle of the zeroes is the color definition
==================================
"""
import sys
import os
import subprocess
def colorizeFile(ColorName,FileName):
ReverseTable = {
"clear" : "01",
"gray" : "03",
"green" : "04",
"purple" : "06",
"blue" : "09",
"yellow" : "0A",
"red" : "0C",
"orange" : "0E",
"c" : "01",
"a" : "03",
"g" : "04",
"p" : "06",
"b" : "09",
"y" : "0A",
"r" : "0C",
"o" : "0E",
}
HexString = 18*"0" + ReverseTable.get(ColorName) + 44*"0"
Xcommand = 'xattr -wx com.apple.FinderInfo {0} {1}'.format(HexString,FileName)
ProcString = subprocess.check_call(Xcommand, stderr=subprocess.STDOUT,shell=True)
if __name__ == "__main__":
if len(sys.argv)<3:
sys.stderr.write(__doc__.format(sys.argv[0]))
else:
Cname = sys.argv[1]
Flist = sys.argv[2:]
for File in Flist:
colorizeFile(Cname.lower(),File)
sys.stderr.write("## Colorized {0} file(s) as {1}\n".format(len(Flist),Cname))
- 1. donde puedo encontrar los certificados SSL en Mac OS X
- 2. GNU encuentra todos los archivos ejecutables: ¿Equivalente en OS X?
- 3. ¿Cómo puedo usar el directorio/home en Mac OS X
- 4. Open Sin editar discos y obtener el tamaño OS X
- 5. ¿Cómo puedo implementar reconocedores de gestos en OS X?
- 6. Tamaño de los iconos de OS X
- 7. JNotify en Mac OS X?
- 8. ¿Cómo puedo editar archivos PDF en una aplicación de iOS?
- 9. ¿Dónde están los registros de PostgreSQL en Mac OS X?
- 10. ¿Cómo puedo instalar Apache Ant en Mac OS X?
- 11. Editar metadatos de archivo PDF con C#
- 12. Enumeración de navegadores instalados en OS X
- 13. ¿Cómo puedo desinstalar Ruby on Rails en Mac OS X?
- 14. PyCharm - $ PATH en OS X
- 15. sem_init en OS X
- 16. ¿Cómo puedo activar los esquemas de color de Vim en el terminal de OS X?
- 17. Edición de archivos grandes en Mac OS X
- 18. TClientDataset en la aplicación OS X Firemonkey
- 19. cómo puedo editar los archivos de texto en la carpeta de activos en android
- 20. ¿Cómo habilitar los núcleos completos en OS X?
- 21. ¿Cómo se enumeran los volúmenes en Mac OS X?
- 22. Cómo estática de enlaces en OS X
- 23. OS X bash: dirname
- 24. ¿Cómo copiar directorios en OS X 10.7.3?
- 25. ¿Cómo configurar libusb en Mac OS X?
- 26. Notificación de cambio del sistema de archivos a nivel de archivos en Mac OS X
- 27. ¿Cómo ejecutar JavaScript usando jsc en OS X?
- 28. Los espacios en java ejecutan la ruta para OS X
- 29. ¿Cómo puedo acceder a los metadatos en rspec before (: all)?
- 30. Dylibs y OS X
Gracias por la respuesta increíble Esto era exactamente lo que estaba buscando. –
De nada – dawg