Показати / приховати розширення файлу через командний рядок OS X


21

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

$ hideextension ~/music/somesong.mp3

Без необхідності відкривати Отримати інформацію та змінювати прапорець, оскільки це дуже нудно.

Я планую включити його до сценарію, який я дзвоню за допомогою ярлика за допомогою FastScripts. Я хотів би спробувати триматися подалі від сценаріїв графічного інтерфейсу, оскільки це нечисто, хоча будь-які ідеї, як це досягти, вітаються.


Якщо це має значення, я намагаюся досягти цього на Леві.
joshua.thomas.bird

Відповіді:


24

Єдиний реальний спосіб змінити це через GUI - це натиснути приховати розширення у вікні Інформація про Finder . Перевірка цього змінює 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>

Строго кажучи, це псевдонім, а не файл. Ось як використовувати AppleScript з командного рядка:, on run argv [newline] tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true [newline] end runвикористовувати як osascript filename.scpt targetfile.
Даніель Бек

1
Ти прав, звичайно. Я додав повну подію AppleScript. Надалі просто продовжуйте додавати у відповідь що-небудь важливе - ви завжди раді.
slhck

1
тільки те , що я шукав .. до щастя , я встановив Xcode і SetFile зробив трюк :-)
thandasoru

SetFileзастаріло з Xcode 6 . Також посилання на сторінку керівництва закінчилось.
Франклін Ю

@FranklinYu Дякую за інформацію Чи знаєте ви про заміну?
slhck

4

Дякую slhck за Вашу відповідь, це допомогло мені купу отримати те, що я хотів зробити.

Отже, оскільки мені подобаються ярлики, я створив службу "Запуск сценарію оболонки" за допомогою Автоматизатора.

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"

Сподіваюся, це допомагає. =)


У STATUS=рядку відсутня зворотна галочка в кінці. Крім того, на моєму Mac + XCode команда GetFileInfoмає літери G.
bjnord

1

Є ще один варіант, якщо ви хочете показати розширення файлу, яке зараз приховано: Finder зберігає цю опцію "приховати розширення" у com.apple.FinderInfoрозширеному атрибуті файлу. Ви можете перевірити це самостійно, виконавши цю команду, в якій перераховані всі розширені атрибути:

xattr -l /path/to/the/file

Отже, щоб показати розширення, ви можете видалити цей атрибут:

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

Але майте на увазі, що Finder зберігає в цьому атрибуті інші метадані, такі як колір тегів, тому ці метадані будуть втрачені. Оскільки атрибут є двійковим, його ви не можете легко змінити.


0

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

  1. Перевірте код свого яблука у файлі .scpt => toggle_hidden_extension.scpt
  2. Коли все добре, додайте shebang ( #!/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

0

Навіть якщо SetFileзастаріла з Xcode 6, вона все ще доступна в XCode 11, тому ви можете очікувати, що вона залишиться в Інструментах командного рядка в передбачуваному майбутньому ...

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.