Erweiterung einer Datei über die OS X-Befehlszeile ein- / ausblenden

21

Ich suche über das Terminal nach einer Möglichkeit, um zu ändern, ob im Finder eine bestimmte Dateierweiterung angezeigt wird oder nicht.

$ hideextension ~/music/somesong.mp3

Ohne Get Info öffnen und das Kontrollkästchen ändern zu müssen, da es sehr mühsam ist.

Ich plane, es in ein Skript zu integrieren, das ich über eine Verknüpfung mit FastScripts aufrufe. Ich würde gerne versuchen, mich von GUI-Skripten fernzuhalten, da dies unsauber erscheint, obwohl alle Ideen, wie dies erreicht werden kann, willkommen sind.

joshua.thomas.bird
quelle
Wenn es einen Unterschied macht, versuche ich dies bei Lion zu erreichen.
joshua.thomas.bird

Antworten:

24

Die einzige wirkliche Möglichkeit , dies über die GUI zu ändern , ist zu klicken ausblenden Erweiterung im Finder Info - Fenster. Wenn Sie dies aktivieren, wird das com.apple.FinderInfoerweiterte Attribut geändert , das Sie normalerweise nicht bearbeiten können - zumindest nicht so einfach. Wir können jedoch ein Tool verwenden, um dies für uns zu tun.

Damit das Folgende funktioniert, muss die Option Alle Dateierweiterungen anzeigen in den Einstellungen von Finder deaktiviert sein.


Über AppleScript

AppleScript bietet diese Funktionalität mit dem set extension hiddenBefehl. Sie benötigen offensichtlich ein aliaszu einem Dateiobjekt. Wir können das zum Beispiel durch einen Dialog erreichen. Hier ist nur ein minimales Arbeitsbeispiel.

tell application "Finder"
    set some_file to (choose file)
    set extension hidden of some_file to true
end tell

Zum Umkehren einfach truemit falsehier tauschen . Der vollständige Aufruf lautet dann zum Beispiel:

set extension hidden of alias "Macintosh HD:Users:werner:Desktop:file.png" to true

Sie können dies auch direkt aus einer Skriptdatei ausführen (danke @DanielBeck für den Zusatz):

on run argv
tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true
end run

Speichern Sie dies als filename.scptund führen Sie es von der Kommandozeile aus mit:

osascript filename.scpt targetfile

Mit dem SetFileBefehl

Hinweis: Dies ist seit Xcode 6 veraltet.

Wenn Sie Xcode installiert haben, erhalten Sie die SetFile(1)Binärdatei, die genau das tut, was Sie wollen (und ein paar weitere Funktionen in Bezug auf Dateiattribute bietet):

Erweiterung ausblenden:

SetFile -a E <file>

Erweiterung erneut anzeigen:

SetFile -a e <file>
slhck
quelle
Genau genommen ist es ein Alias, keine Datei. So verwenden Sie das AppleScript über die Befehlszeile: on run argv [newline] tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true [newline] end runVerwenden Sie as osascript filename.scpt targetfile.
Daniel Beck
1
Du hast natürlich recht. Ich habe das vollständige AppleScript-Ereignis hinzugefügt. Fügen Sie in Zukunft einfach etwas Wichtiges zur Antwort hinzu - Sie sind immer dazu eingeladen.
Slhck
1
Genau das, wonach ich gesucht habe. Zum Glück habe ich Xcode installiert und SetFile hat es geschafft :-)
thandasoru
SetFileist veraltet seit Xcode 6 . Auch der Link zur Manpage ist abgelaufen.
Franklin Yu
@FranklinYu Danke für die Info. Kennen Sie einen Ersatz?
Slhck
4

Danke slhck für deine Antwort, es hat mir geholfen, das zu erledigen, was ich wollte.

Da ich Verknüpfungen mag, habe ich einen "Run Shell Script" -Dienst durch Automator erstellt.

for f in "$@"
do
    STATUS=`getFileInfo -ae "$f"`
    if [ $STATUS== 0 ];
    then
        SetFile -a E "$f"
    else
        SetFile -a e "$f"
    fi
done

Dann ging ich zu Finder -> Diensteinstellungen und fügte eine Verknüpfung zum Dienst hinzu.

 "Command + Shift + H" didn't work for me,
 "Command + H" hides the application
 so i chose "Command + Shift + E"

Ich hoffe es hilft. =)

Flurin Arner
quelle
In der STATUS=Zeile fehlt am Ende ein Back-Tick. Außerdem hat der Befehl auf meinem Mac + XCode GetFileInfoein Großbuchstaben G.
Bjnord
1

Es gibt eine weitere Option, wenn Sie die derzeit ausgeblendete Dateierweiterung anzeigen möchten: Finder speichert diese Option "Erweiterung ausblenden" im com.apple.FinderInfoerweiterten Dateiattribut. Sie können dies selbst überprüfen, indem Sie diesen Befehl ausführen, der alle erweiterten Attribute auflistet:

xattr -l /path/to/the/file

Um die Erweiterung anzuzeigen, können Sie das folgende Attribut entfernen:

xattr -d com.apple.FinderInfo /path/to/the/file

Beachten Sie jedoch, dass Finder in diesem Attribut andere Metadaten wie die Tag-Farbe speichert , sodass diese Metadaten verloren gehen. Und da das Attribut binär ist, können Sie es nicht einfach ändern.

Skozin
quelle
0

Um nur ein Argument in der Befehlszeile ( $ hideextension ~/music/somesong.mp3) zu haben, können Sie Ihr AppleScript zu einem Shell-Skript machen. Es ist möglich, im shebang ( #!/usr/bin/osascript) osascript wie im folgenden Code zu verwenden. Fortfahren :

  1. Testen Sie Ihren Applescript-Code in einer .scpt-Datei => toggle_hidden_extension.scpt
  2. Wenn OK, fügen Sie den shebang ( #!/usr/bin/osascript) am Anfang der Datei hinzu
  3. Exportiere es mit dem Dateiformat "text" => toggle_hidden_extension.applescript
  4. Ändern Sie die Erweiterung in .sh => toggle_hidden_extension.sh
  5. Machen Sie es im Terminal ausführbar:

    chmod u+x toggle_hidden_extension.sh
    
  6. Jetzt können Sie es ausführen:

    ./toggle_hidden_extension.sh /path/to/myfile.mp3
    

Also, der Code zur Veranschaulichung:

#!/usr/bin/osascript

(*
usage: toggle_hidden_extension.sh file
*)

(*
Test 1 : ./toggle_hidden_extension.sh /Users/boissonnfive/Desktop/file.txt
Test 2 : ./toggle_hidden_extension.sh
Test 3 : ./toggle_hidden_extension.sh 0fdjksl/,3
*)

on run argv
    try
        processArgs(argv)
        toggleHiddenExtension(item 1 of argv)
    on error
        return usage()
    end try

    if result then
        return "Extension hidden for " & POSIX path of (item 1 of argv)
    else
        return "Extension revealed for " & (POSIX path of (item 1 of argv))
    end if

end run


on usage()

    return "usage: toggle_hidden_extension.sh file"

end usage

on processArgs(myArgs)

    set item 1 of myArgs to POSIX file (first item of myArgs) as alias

end processArgs

on toggleHiddenExtension(myFile)

    tell application "Finder" to set extension hidden of myFile to not (extension hidden of myFile)

end toggleHiddenExtension
boissonnfive
quelle
0

Auch wenn SetFileXcode 6 veraltet ist, ist es in XCode 11 immer noch verfügbar. Sie können also davon ausgehen, dass es auf absehbare Zeit in den Befehlszeilentools verbleibt ...

https://download.developer.apple.com/Developer_Tools/Command_Line_Tools_for_Xcode_11/Command_Line_Tools_for_Xcode_11.dmg

$ pkgutil --payload-files /Volumes/Command\ Line\ Developer\ Tools/Command\ Line\ Tools.pkg | grep SetFile
./Library/Developer/CommandLineTools/usr/bin/SetFile
./Library/Developer/CommandLineTools/usr/share/man/man1/SetFile.1
dardo82
quelle