Pokaż / ukryj rozszerzenie pliku za pomocą wiersza poleceń OS X

21

Szukam sposobu, poprzez terminal, aby zmienić, czy określone rozszerzenie pliku jest wyświetlane w Finderze, coś w stylu:

$ hideextension ~/music/somesong.mp3

Bez konieczności otwierania Uzyskaj informacje i zmiany pola wyboru, ponieważ jest to bardzo uciążliwe.

Planuję włączyć go do skryptu, który wywołuję za pomocą skrótu za pomocą FastScripts. Chciałbym trzymać się z dala od skryptów GUI, ponieważ wydaje się to nieczyste, chociaż wszelkie pomysły na to, jak to osiągnąć, są mile widziane.

joshua.thomas.bird
źródło
Jeśli robi to jakąkolwiek różnicę, staram się to osiągnąć na Lion.
joshua.thomas.bird

Odpowiedzi:

24

Jedynym prawdziwym sposobem na zmianę tego za pomocą GUI jest kliknięcie Ukryj rozszerzenie w oknie Informacje o Finderze . Zaznaczenie tego powoduje zmianę com.apple.FinderInfoatrybutu rozszerzonego, którego normalnie nie można edytować - przynajmniej nie łatwo. Możemy jednak użyć do tego narzędzia.

Aby poniższe czynności działały, oczywiście musisz odznaczyć Pokaż wszystkie rozszerzenia plików w preferencjach Findera.


Poprzez AppleScript

AppleScript oferuje tę funkcjonalność za pomocą set extension hiddenpolecenia. Oczywiście potrzebujesz aliasobiektu pliku. Możemy to uzyskać na przykład poprzez okno dialogowe. Oto tylko minimalny działający przykład.

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

Aby odwrócić, tak wymieniać truez falsetutaj. Pełne połączenie to na przykład:

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

Możesz również uruchomić to bezpośrednio z pliku skryptu (dzięki @DanielBeck za dodanie):

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

Zapisz to jako filename.scpti uruchom z wiersza poleceń za pomocą:

osascript filename.scpt targetfile

Za pomocą SetFilepolecenia

Uwaga: Jest to przestarzałe od Xcode 6.

Jeśli masz zainstalowany Xcode, otrzymasz SetFile(1)plik binarny, który robi dokładnie to, co chcesz (i oferuje kilka dodatkowych funkcji związanych z atrybutami plików):

Ukryj rozszerzenie:

SetFile -a E <file>

Pokaż rozszerzenie ponownie:

SetFile -a e <file>
slhck
źródło
Ściśle mówiąc, jest to alias, a nie plik. Oto jak używać AppleScript z wiersza poleceń: on run argv [newline] tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true [newline] end runużyj jako osascript filename.scpt targetfile.
Daniel Beck
1
Oczywiście masz rację. Dodałem pełne zdarzenie AppleScript. W przyszłości po prostu dodaj coś ważnego do odpowiedzi - zawsze możesz.
slhck
1
właśnie tego szukałem .. na szczęście mam zainstalowany Xcode i SetFile załatwiło sprawę :-)
thandasoru
SetFilejest przestarzałe od Xcode 6 . Wygasł również link do strony podręcznika.
Franklin Yu,
@FranklinYu Dzięki za informację. Czy znasz zamiennik?
slhck
4

Dzięki slhck za twoją odpowiedź, pomogło mi to zrobić to, co chciałem zrobić.

Ponieważ lubię skróty, stworzyłem usługę „Uruchom skrypt powłoki” za pośrednictwem Automatora.

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

Potem poszedłem do Findera -> Preferencje usług i dodałem skrót do usługi.

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

Mam nadzieję, że to pomoże. =)

Flurin Arner
źródło
Na STATUS=końcu linii brakuje zaznaczenia wstecz. Ponadto na moim Macu + XCode polecenie GetFileInfoma wielką
literę
1

Jest jeszcze jedna opcja, jeśli chcesz pokazać rozszerzenie pliku, które jest obecnie ukryte: Finder przechowuje tę opcję „ukryj rozszerzenie” w com.apple.FinderInfoatrybucie rozszerzonego pliku. Możesz to sprawdzić samodzielnie, uruchamiając to polecenie, które wyświetla wszystkie rozszerzone atrybuty:

xattr -l /path/to/the/file

Aby wyświetlić rozszerzenie, możesz usunąć ten atrybut:

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

Pamiętaj jednak, że Finder przechowuje w tym atrybucie inne metadane, takie jak kolor znacznika, więc te metadane zostaną utracone. Ponieważ atrybut jest binarny, nie można go łatwo modyfikować.

skozin
źródło
0

Aby mieć tylko jeden argument w wierszu poleceń ( $ hideextension ~/music/somesong.mp3), możesz zmienić swój skrypt AppleScript w skrypt powłoki. Możliwe jest użycie osascript w shebang ( #!/usr/bin/osascript) jak w poniższym kodzie. Kontynuować :

  1. Przetestuj kod Applecript w pliku .scpt => toggle_hidden_extension.scpt
  2. Kiedy OK, dodaj shebang ( #!/usr/bin/osascript) na początku pliku
  3. Wyeksportuj go w formacie pliku „tekst” => toggle_hidden_extension.applescript
  4. Zmień rozszerzenie na .sh => toggle_hidden_extension.sh
  5. W Terminalu ustaw, aby był wykonywalny:

    chmod u+x toggle_hidden_extension.sh
    
  6. Teraz możesz go uruchomić:

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

Tak więc kod ilustrujący:

#!/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
źródło
0

Nawet jeśli SetFilejest przestarzałe od Xcode 6, nadal jest dostępny w XCode 11, więc możesz spodziewać się, że pozostanie w Narzędziach wiersza poleceń w przewidywalnej przyszłości ...

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
źródło