Wie kann ich das Symbol für eine Datei oder einen Ordner im Terminal ändern oder festlegen, muss ich eine Skriptsprache verwenden?
Wie kann ich das Symbol für eine Datei oder einen Ordner im Terminal ändern oder festlegen, muss ich eine Skriptsprache verwenden?
Antworten:
Sie müssen die Entwicklertools installiert haben, und dann funktioniert möglicherweise Folgendes. Dies nimmt die Grafik auf icon.png
und wendet sie an file.ext
.
# Take an image and make the image its own icon:
sips -i icon.png
# Extract the icon to its own resource file:
/Developer/Tools/DeRez -only icns icon.png > tmpicns.rsrc
# append this resource to the file you want to icon-ize.
/Developer/Tools/Rez -append tmpicns.rsrc -o file.ext
# Use the resource to set the icon.
/Developer/Tools/SetFile -a C file.ext
# clean up.
rm tmpicns.rsrc
# rm icon.png # probably want to keep this for re-use.
Rez -append
beim Arbeiten mit .avi
Dateien. ### Rez - Fatal error trying to open the resource file "Video.avi" for writing.
Irgendwelche Ideen?
$PATH
(Stubs /usr/bin
, die wissen, wo sich die eigentlichen Tools befinden) und nicht /Developer/Tools
mehr in befinden. Sie sollten sie daher nur über ihre Dateinamen aufrufen. dh im vorliegenden Fall als gerecht Rez
und DeRez
.
Mit dem Vorteil einer mehrjährigen Rückschau:
user588 Antwort und Antwort der koiyu Arbeit gut, aber sie verlassen sich auf Dienstprogramme ( Rez
, DeRez
, und SetFile
) , dass:
Rez
und DeRez
, weil sie sich auf Kohlenstoff beziehen)osxiconutils sehen interessant aus, werden aber nicht mehr kompiliert (ab OSX 10.10.4) .
Daher habe ich eine CLIfileicon
erstellt , die auf einem makellosen OSX-Computer funktionieren sollte (keine Voraussetzungen) . es ist ein Bash - Skript in erster Linie auf der Grundlage xattr
, xxd
und ein eingebetteter Python - Skript , das Cocoa, mit freundlicher Genehmigung von nennt diese hilfreichen Antwort .
Es ermöglicht das Setzen / Entfernen / Extrahieren von benutzerdefinierten Symbolen für / aus Dateien oder Ordnern , einschließlich auf APFS-Volumes unter macOS 10.13 (High Sierra).
Sie können es wie folgt installieren:
[sudo] npm install -g fileicon
fileicon
(dieser Link bleibt aktuell).chmod +x fileicon
.$PATH
, z. B. /usr/local/bin
(erfordert sudo
).Hier sind die Nutzungsinformationen. Vollständige Informationen finden Sie im Handbuch :
$ fileicon -h
Set a custom icon for a file or folder:
fileicon set <fileOrFolder> <imageFile>
Remove a custom icon from a file or folder:
fileicon rm <fileOrFolder>
Get a file or folder's custom icon:
fileicon get [-f] <fileOrFolder> [<iconOutputFile>]
Test if a file or folder has a custom icon:
fileicon test <fileOrFolder>
-q ... silence status output
Standard options: --help, --man, --version, --home
fileicon --man
).
curl -L http://git.io/n-install | bash
.
fileicon
, das immer noch funktioniert (und tatsächlich erstellt wurde, weil es osxiconutils
nicht mehr funktioniert). Ich habe die Antwort aktualisiert, um dies klarer zu machen .
Ich fast ein Kopfgeld auf diese begann, weil ich nicht das Symbol eines ändern schaffte Ordner mit @ mankoff ‚s Antwort . Aber ich habe eine Lösung gefunden.
Um das Ordnersymbol zu ändern, zeigen Sie nicht Rez -append tmp.rsrc
auf den Ordner, sondern auf eine spezielle Icon\r
Datei im Ordner. Wenn Sie dem Ordner noch kein benutzerdefiniertes Symbol zugewiesen haben, ist die Datei wahrscheinlich nicht vorhanden, Rez
erstellt sie jedoch sofort. Wenn Sie die Icon\r
Datei löschen , wird das benutzerdefinierte Symbol entfernt. Um Unfälle zu vermeiden, sollten Sie es ausblenden.
Dies sind die Änderungen an der Antwort des Mankoff:
# Append a resource to the folder you want to icon-ize.
Rez -append tmpicns.rsrc -o $'myfolder/Icon\r'
# Use the resource to set the icon.
SetFile -a C myfolder/
# Hide the Icon\r file from Finder.
SetFile -a V $'myfolder/Icon\r'
Zusätzlich zu Ruby gibt es hier eine Python-Version:
#!/usr/bin/env python
import Cocoa
import sys
Cocoa.NSWorkspace.sharedWorkspace().setIcon_forFile_options_(Cocoa.NSImage.alloc().initWithContentsOfFile_(sys.argv[1].decode('utf-8')), sys.argv[2].decode('utf-8'), 0) or sys.exit("Unable to set file icon")
./set-image.py image.png myfile
In Python, das unter Mac OS vorinstalliert ist, ist PyObjC bereits vorhanden, sodass Sie keine Pakete installieren müssen.
Check out setfileicon
(Quellcode) , ein Dienstprogramm, das von Damien Bobillot erstellt wurde.
Laden Sie die Binärdatei hier herunter: http://maxao.free.fr/telechargements/setfileicon.gz
Machen Sie die Datei nach dem Entpacken ausführbar:
chmod +x setfileicon
Dann können Sie es wie folgt verwenden:
./setfileicon "my-icon.icns" "my-file-or-directory"
Ich habe ein Github-Projekt, in dem ich AppleScript- "Droplets" aus [Shell / Bash, Python, Perl, Ruby usw.] -Skripten erstelle, die Dateipfade als Argumente verwenden. Ich habe diese Bash-Funktion geschrieben, um das Symbol eines Ordners zu ändern (da AppleScript-Bundles Ordner mit der Erweiterung .app sind).
replace_icon(){
droplet="$1"
icon="$2"
if [[ "$icon" =~ ^https?:// ]]; then
curl -sLo /tmp/icon "$icon"
icon=/tmp/icon
fi
rm -rf "$droplet"$'/Icon\r'
sips -i "$icon" >/dev/null
DeRez -only icns "$icon" > /tmp/icns.rsrc
Rez -append /tmp/icns.rsrc -o "$droplet"$'/Icon\r'
SetFile -a C "$droplet"
SetFile -a V "$droplet"$'/Icon\r'
}
Einmal definiert, rufen Sie die Funktion mit 2 Argumenten auf:
replace_icon /path/to/AppleScript.app /path/to/icon.png
oder
replace_icon /path/to/AppleScript.app http://i.imgur.com/LmUvWqB.png
Wie Sie sehen, kann das zweite Argument ein Bild auf Ihrem System oder eine URL sein.
HINWEIS: Das verrückte Aussehen $'/Icon\r'
, das ich mache, ist, weil der Name der Icon-Datei mit einem wörtlichen Wagenrücklauf endet \r
. Überzeugen Sie sich selbst mit:
find my-applescript.app -maxdepth 1 | less -U
Vorausgesetzt, wir haben bereits eine icns-Datei. Erstellen Sie eine temporäre Ressourcendatei, die auf icns-file verweist:
$ echo "read 'icns' (-16455) \"Icon.icns\";" >> Icon.rsrc
Hängen Sie die Ressourcendatei als Wert des erweiterten Attributs "com.apple.ResourceFork" an eine Datei an:
$ Rez -a Icon.rsrc -o FileName.ext
Zeigen Sie das Symbol der Datei an:
$ SetFile -a C FileName.ext
Hänge die Ressourcendatei als Wert des erweiterten Attributs "com.apple.ResourceFork" an eine magische Symboldatei im aktuellen Ordner an:
$ Rez -a Icon.rsrc -o Icon$'\r'
Zeigt das Symbol des aktuellen Ordners an:
$ SetFile -a C .
Verstecke die magische Symboldatei im aktuellen Ordner (drücke ⇧⌘., Um versteckte Dateien im Finder anzuzeigen / auszublenden):
$ SetFile -a V Icon$'\r'
Symboldaten werden als Wert des erweiterten Attributs "com.apple.ResourceFork" gespeichert (Terminalbefehl "xattr -p com.apple.ResourceFork FileName.ext" gibt den Wert aus). Für einen Ordner gibt es eine magische (leere und versteckte) Datei Icon$'\r'
im Ordner. So extrahieren Sie Symboldaten aus dem erweiterten Attribut "com.apple.ResourceFork" in eine Nur-Text-Ressourcendatei (aus der die korrekte ICNS-Typ-ID "-16455" bekannt ist):
$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc
Unter macOS $ sips -i ImageFile.icns/png/jpg
10.13 erzeugt der Befehl High Sierra den Fehler "--addIcon wird nicht mehr unterstützt". Schalter "-i" bedeutet "--addIcon" als erweitertes Attribut "com.apple.ResourceFork" für diese Datei selbst unter Verwendung des Inhalts dieser Bilddatei.
Eine andere Option ist die Verwendung von MacRuby:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
Sie können ein Installationsprogramm für MacRuby von http://macruby.org herunterladen .
Seltsamerweise scheint die beste Lösung nicht die Verwendung von Apples eigenen Tools zu sein, sondern des Python-Codes, da er verschiedene Vorteile bietet, die nicht durch Folgendes eingeschränkt werden:
Aktualisieren
Jetzt (unter macOS Sierra) scheint die Antwort von @ koiyu zu funktionieren. Sie können also diesen Doppelliner verwenden, um das Symbol aus einem Quellordner in Ihren Zielordner zu kopieren:
#!/bin/sh
DeRez -only icns $1/Icon$'\r' > icon.rsrc; Rez -a icon.rsrc -o $2/Icon$'\r'
SetFile -a C $2; SetFile -a V $2/Icon$'\r'; rm icon.rsrc
In der aktuellen MacOS-Version (10.14) sips -i icon.png
wird ein --addIcon is no longer supported
Fehler angezeigt.
Außerdem mussten Entwicklertools installiert sein. Dies nimmt die Grafik auf Icon.png
und wendet sie an file.ext
, genau wie die Antwort von user588 :
# Covert Icon.png to tempicons.icns:
sips -s format icns Icon.png --out tmpicns.icns
# Create temp resource file which points to tempicons.icns:
echo "read 'icns' (-16455) \"tmpicns.icns\";" >> tmpicns.rsrc
# append this resource to the file you want to icon-ize.
Rez -a tmpicns.rsrc -o file.ext
# Use the resource to set the icon.
SetFile -a C file.ext
# Clean up
rm tempicons.icns && rm tmpicns.rsrc
Ähnlich wie bei der Python-Lösung mit PyObjC kann sie nur mit AppleScript ausgeführt werden (das in 10.15 Catalina im Gegensatz zu Python und anderen Skriptsprachen nicht veraltet ist).
Ich habe hier ein Beispiel dafür auf GitHub gefunden:
#!/usr/bin/env osascript use framework "AppKit" -------------------------------------------------------------------------------- # PROPERTY DECLARATIONS: property this : a reference to current application property NSWorkspace : a reference to NSWorkspace of this property NSImage : a reference to NSImage of this -------------------------------------------------------------------------------- # IMPLEMENTATION: on run argv set icon to item 1 of argv set target to item 2 of argv setIcon to icon for target end run -------------------------------------------------------------------------------- # HANDLERS: to setIcon to iconPath for filePath set sharedWorkspace to NSWorkspace's sharedWorkspace() set newImage to NSImage's alloc() set icon to newImage's initWithContentsOfFile:iconPath set success to sharedWorkspace's setIcon:icon forFile:filePath options:0 end setIcon
AppleScript ist nicht einfach zu lesen, aber anscheinend ist es möglich, über das AppKit-Framework auf den Objective-C-Code zuzugreifen.