Wie kann ich ein Datei- oder Ordnersymbol mit dem Terminal ändern?
-
16-10-2019 - |
Frage
Wie kann ich das Symbol für eine Datei oder einen Ordner im Terminal ändern oder festlegen. Muss ich eine Skriptsprache verwenden?
Lösung
Sie benötigen die Entwickler -Tools installiert, und dann kann das folgende funktionieren. Dies nimmt die Grafik ein icon.png
und wendet es auf 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.
Andere Tipps
Mit mehreren Jahren im Nachhinein:
Antwort von User588 und Koiyus Antwort Arbeit gut, aber sie verlassen sich auf Versorgungsunternehmen (Rez
, DeRez
, und SetFile
) das:
- Sie sind nicht standardmäßig installiert (sie werden entweder mit Xcode oder den Entwickler-Befehlszeilen-Dienstprogrammen geliefert)
- sind jetzt veraltet (
Rez
undDeRez
, weil sie sich auf Kohlenstoff beziehen)
Osxiconutils Sieh interessant aus, aber aber wird nicht mehr kompilieren (ab OSX 10.10.4).
Deshalb habe ich geschaffen Cli fileicon
, die Sollte an einer unberührten OSX -Maschine arbeiten (keine Voraussetzungen); Es ist ein Bash -Skript, das hauptsächlich auf xattr
, xxd
und ein eingebettetes Python -Drehbuch, das Kakao nennt, mit freundlicher Genehmigung von Diese hilfreiche Antwort.
Es erlaubt Festlegen/Entfernen/Extrahieren benutzerdefinierter Symbole für/aus Dateien oder Ordnern, einschließlich auf APFS -Bänden auf macOS 10.13 (High Sierra).
Sie können es wie folgt installieren:
- Wenn Sie node.js installiert haben, aus dem NPM -Register, mit
[sudo] npm install -g fileicon
- Andernfalls:
- Download Die CLI wie
fileicon
(Dieser Link bleibt aktuell). - Machen es ausführbar mit
chmod +x fileicon
. - Bewegen Sie es oder symlink es in einen Ordner in Ihrem
$PATH
, wie zum Beispiel/usr/local/bin
(erfordertsudo
).
- Download Die CLI wie
Hier sind die Nutzungsinformationen; Ausführliche Informationen finden Sie in der 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
ich fast begann ein Kopfgeld dazu, weil ich es nicht geschafft habe, das Symbol von a zu ändern Mappe use @Mankoff's Antworten. Aber ich fand eine Lösung.
Um das Symbol des Ordners zu ändern, zeigen Sie nicht Rez -append tmp.rsrc
zum Ordner, aber ein besonderes Icon r
Datei im Ordner. Wenn Sie ein benutzerdefiniertes Symbol für den Ordner noch nicht festgelegt haben, wird die Datei wahrscheinlich nicht existieren, aber Rez
erstellt es auf die Fliege. Löschen des Icon\r
Die Datei entfernen das benutzerdefinierte Symbol. Um Unfälle zu verhindern, ist es gut, versteckt zu sein.
Dies sind die Modifikationen zur Antwort des Mankoffs:
# 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 finden Sie 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
Python, das in Mac OS vorinstalliert wurde, hat bereits Pyobjc, sodass Sie keine Pakete installieren müssen.
Kasse setfileicon
(Quellcode), ein von Damien Bobillot erstellter Versorgungsunternehmen.
Laden Sie die Binärdatei hier herunter: http://maxao.free.fr/telechargements/setfileicon.gz
Machen Sie nach dem Auspacken der Datei sie 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 Wo ich appleScript "Tröpfchen" aus [Shell/Bash, Python, Perl, Ruby usw.] erstelle, die Dateipfade als Argumente aufnehmen. Ich habe diese Bash -Funktion geschrieben, um das Symbol eines Ordners zu ändern (da Apfelkriptbündel Ordner mit einer .App -Erweiterung 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 können, kann das zweite Argument ein Bild auf Ihrem System oder eine URL sein.
HINWEIS: Dieser verrückt aussehende $'/Icon\r'
Was ich tue, ist, weil der Name der Icon -Datei mit a endet wörtlich Kutschenrückkehr \r
. Überzeugen Sie sich selbst mit:
find my-applescript.app -maxdepth 1 | less -U
Angenommen, wir haben bereits ICNS-File. Erstellen Sie die Temporce-Datei, die auf ICNS-File hinweist:
$ echo "read 'icns' (-16455) \"Icon.icns\";" >> Icon.rsrc
Gehen 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
Gehen Sie 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'
Zeigen Sie das Symbol des aktuellen Ordners an:
$ SetFile -a C .
Verstecken Sie die Magic -Symboldatei im aktuellen Ordner (drücken Sie ⇧⌘. Um versteckte Dateien im Finder anzuzeigen/auszublenden):
$ SetFile -a V Icon$'\r'
Weitere Details
Die ICON -Daten werden als Wert des erweiterten Attributs "com.apple.resourcefork" gespeichert (Terminalbefehl "xattr -p com.apple.resourcefork Dateiname.Ext" druckt den Wert). Für einen Ordner gibt es Magie (die leer und versteckt ist) Datei Icon$'\r'
im Ordner. Um Symboldaten aus dem erweiterten Attribut "com.apple.resourcefork" in die Ressourcendatei "Com.apple.Resourcefork" zu extrahieren (aus der wir korrekt korrekte ICNS-Typ-Kennung "-16455" kennen)):
$ DeRez -only icns FileWithIcon.ext > Icon.rsrc
$ DeRez -only icns /Folder/With/Icon/Icon$'\r' > Icon.rsrc
Unter macOS 10.13 High Sierra Command $ sips -i ImageFile.icns/png/jpg
Erzeugt Fehler "--addicon wird nicht mehr unterstützt". Switch "-i" bedeutet "--addicon" als erweitertes Attribut "com.apple.resourcefork" auf diese Datei selbst mit dem Inhalt dieser Bilddatei.
Eine andere Option ist die Verwendung von Makruby:
/usr/local/bin/macruby -e 'framework "Cocoa";NSWorkspace.sharedWorkspace.setIcon(NSImage.alloc.initWithContentsOfFile("/tmp/a.png"),forFile:"/tmp/file",options:0)'
Sie können einen Installateur für Macruby herunterladen http://macruby.org.
Seltsamerweise scheint die beste Lösung nicht darin zu sein, die eigenen Tools von Apple zu verwenden, sondern den Python -Code, da er verschiedene Vorteile hat, die nicht begrenzt sind durch:
- Ausgabedateiauflösung
(Es funktioniert bis 1024x1024) - Eingabedateiformat
(Proben mit ICNS und PNG) - Berechtigungen zu installieren
(definieren Sie es als Funktion)
Aktualisieren
Nun (auf Macos Sierra) @Koiyus Antwort scheint zu funktionieren, sodass Sie diesen Zwei-Liner verwenden können, 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 letzten MacOS -Version (10.14), sips -i icon.png
wird a bekommen --addIcon is no longer supported
Error.
Es wurden auch Entwicklerwerkzeuge installiert. Dies nimmt die Grafik ein Icon.png
und wendet es auf file.ext
, so wie 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