Qualcuno sa se è possibile modificare direttamente i metadati del file su OS X. Specificamente in perl. Il parametro che sto specificatamente cercando di cambiare è kMDItemFSLabel
(il colore del file). Ho avuto una ricerca in giro e non riesco a trovare un modo per farlo senza utilizzare un modulo come Mac::Glue o un'applicazione esterna (Finder).Come posso modificare i metadati dei file in OS X?
risposta
L'attributo kMDItemFSLabel
è una proprietà del Finder. È necessario utilizzare un modo per comunicare con il Finder per modificare i suoi dati. Per quanto ne so, non c'è niente che tu possa giocare con Perl per cambiare i dati del Finder senza passare attraverso il Finder.
Ci sono diversi modi per farlo:
Utilizzare CamelBones quando la nuova versione viene fuori. Ciò consente a un bridge di raggiungere l'obiettivo C da Perl. Quindi dovrai utilizzare il metodo Apple con le chiamate di sistema Cocoa. ripida curva di apprendimento per Cacao ...
Se si dispone di strumenti di sviluppo, uso/Developer/Tools/SetFile (se questo supporta l'elemento di metadati)
Usa osascript per inviare il messaggio al Finder di cambiare il colore del file. Puoi dare un'occhiata a this in un post precedente per suggerimenti su come farlo.
La maggior parte dei ponti C/Cocoa legati all'obiettivo Perl sono morti purtroppo. MacPerl non è stato aggiornato dal 2005.
Quasi tutti i metodi più semplici richiedono di conoscere almeno una quantità minima di Applescript e di chiamare il testo di tale script tramite una chiamata di tipo interpolato a osascript.
Nella sua forma 1 riga, osascript rende Perl sembrare bello:
osascript -e 'tell application "Finder"' -e "activate" -e "display dialog \"hello\"" -e 'end tell'
Per utilizzare osascript da Perl, la maggior parte utilizza un documento QUI. Ci sono esempi da I libro che ho chiamato Applescript - The Definitive Guide e da brian d foy on Controlling iTunes with Perl.
Ecco uno script in Perl che ho scritto per l'impostazione del colore file usando 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);
Se il colore Finder è 0, kMDItemFSLabel
è 0. Se non v'è alcun set di colori, kMDItemFSLabel
diventa a 8 colori. per esempio, l'etichetta "orange" è label index
1, kMDItemFSLabel
= 7; l'etichetta "rosso" è label index
2, kMDItemFSLabel
= 6; e così via.
Non esiste alcuna funzione incorporata in Perl per operare sui metadati del filesystem Mac. O usi una libreria da CPAN, o scrivi tu stesso, probabilmente non così bene come ha fatto l'autore di CPAN.
In realtà non è così complicato da implementare. È possibile utilizzare il comando xattr
come mostrato nella stringa doc sotto ... Ho avvolto la funzione di base in uno script python che si applica i colori con nome ad una serie di file ...
#!/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. Come posso implementare i riconoscitori di gesti in OS X?
- 2. Scrittura di metadati immagine (EXIF/TIFF/IPTC) in file immagine in OS X
- 3. Enumerazione dei browser installati su OS X
- 4. Come modificare l'eseguibile in un pacchetto di applicazioni OS X
- 5. Specifica dei binari firmati su OS X
- 6. Problemi con i metadati dei file con Java nio
- 7. OS X: elenco e rimuovere i file con spazi
- 8. Come aggiungere i metadati ai file resx
- 9. Modificare il titolo dell'applicazione Tkinter in OS X Barra dei menu
- 10. Come posso utilizzare la directory/home su Mac OS X
- 11. Come posso modificare il titolo dell'applicazione java swing nella barra del titolo di Mac OS X?
- 12. Decomprimi automaticamente i file nelle cartelle [mac os x]
- 13. I file dei metadati del parquet devono essere riavvolti?
- 14. Come posso cambiare i permessi dei file in Ubuntu
- 15. Come modificare o aggiungere metadati video di "rotazione" in mp4?
- 16. Modificare lo sfondo su tutti i desktop in OS X 10.7 Lion?
- 17. Mac OS X: aggiungi un campo di metadati personalizzato a qualsiasi file
- 18. GNU trova tutti i file eseguibili: Equivalente su OS X?
- 19. Come ottenere i metadati dai file mp3
- 20. Makefile per i manichini? Mac OS X
- 21. come ottenere i metadati dei media javafx senza listener
- 22. Come posso leggere i metadati PNG da PHP?
- 23. Emulazione dei binari di Linux in Mac OS X
- 24. Come posso creare una directory di file Java accettando le directory come FileType in OS X?
- 25. Come posso creare mod_jk su Mac OS X Mountain Lion?
- 26. Icona ad alta risoluzione per file in Mac OS X?
- 27. cmake: come modificare i permessi dei file durante l'installazione?
- 28. Come si gestiscono i pacchetti Python su OS X Lion?
- 29. Come rilevare SSD in Mac OS X?
- 30. Come posso verificare il supporto hardware BLE su OS X?
Grazie per il risposta fantastica Questo era esattamente quello che stavo cercando. –
Prego – dawg