18

Я ищу способ через терминал, чтобы изменить, отображается ли расширение конкретного файла в Finder, что-то вроде:

$ hideextension ~/music/somesong.mp3

Без необходимости открывать Get Info и менять флажок, так как это очень утомительно.

Я планирую включить его в скрипт, который я вызываю с помощью ярлыка с использованием FastScripts. Я хотел бы попытаться держаться подальше от сценариев GUI, так как это кажется нечистым, хотя любые идеи о том, как этого добиться, приветствуются.

3 ответа3

22

Единственный реальный способ изменить это через графический интерфейс - это щелкнуть Скрыть расширение в окне Finder Info . Проверка этого изменяет com.apple.FinderInfo , который вы обычно не можете редактировать - по крайней мере, не легко. Однако мы можем использовать инструмент, чтобы сделать это для нас.

Чтобы работало ниже, вам, очевидно, нужно, чтобы в настройках Finder не было отмечено « Показать все расширения файлов ».


Через AppleScript

AppleScript предлагает эту функцию с помощью команды set extension hidden . Вам явно нужен alias для файлового объекта. Мы можем получить это, например, через диалог. Вот только минимальный рабочий пример.

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

Чтобы поменять местами, просто обменяйте true на false Полный вызов тогда, например:

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

Вы можете запустить это прямо из файла скрипта (спасибо @DanielBeck за добавление):

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

Сохраните это как filename.scpt и запустите его из командной строки:

osascript filename.scpt targetfile

С помощью команды SetFile

Примечание: Это устарело начиная с Xcode 6.

Если у вас установлен Xcode, вы получите SetFile(1) , который делает именно то, что вам нужно (и предлагает еще несколько функций, связанных с атрибутами файла):

Скрыть расширение:

SetFile -a E <file>

Показать расширение еще раз:

SetFile -a e <file>
4

Спасибо slhck за ваш ответ, он помог мне получить то, что я хотел сделать.

Так как мне нравятся ярлыки, я создал службу "Run Shell Script" через Automator.

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

Затем я зашел в Finder -> Настройки служб и добавил ярлык для службы.

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

Надеюсь, поможет. знак равно

0

Для того чтобы в командной строке был только один аргумент ($ hideextension ~/music/somesong.mp3), вы можете сделать appleScript сценарием оболочки. Можно использовать osascript в шебанге (#!/usr/bin/osascript), как в следующем коде. Продолжать :

  1. Проверьте свой код appleScript в файле .scpt => toggle_hidden_extension.scpt
  2. Когда все в порядке, добавьте шебанг (#!/usr/bin/osascript) в начале файла
  3. Экспортируйте его с форматом файла "text" => toggle_hidden_extension.applescript
  4. Изменить расширение на .sh => toggle_hidden_extension.sh
  5. В терминале сделайте его исполняемым:

    chmod u+x toggle_hidden_extension.sh
    
  6. Теперь вы можете запустить его:

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

Итак, код для иллюстрации:

#!/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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .