web-dev-qa-db-ja.com

OS Xコマンドラインでファイルの拡張子を表示/非表示

ターミナルを介して、特定のファイルの拡張子がFinderに表示されるかどうかを変更する方法を探しています。

$ hideextension ~/music/somesong.mp3

面倒なので、Get Infoを開いてチェックボックスを変更する必要はありません。

FastScriptを使用してショートカットから呼び出すスクリプトに組み込む予定です。不快な感じがするGUIスクリプトは避けてください。これを実現する方法についてのアイデアは歓迎します。

21

GUIを介してこれを変更する唯一の実際の方法は、FinderでHide extensionをクリックすることですInfoウィンドウ。これをチェックすると、通常は編集できない_com.Apple.FinderInfo_拡張属性が変更されます-少なくとも簡単にはできません。ただし、ツールを使用してそれを行うことができます。

以下が機能するためには、Finderの設定でShow all file extensionsをオフにする必要があることは明らかです。


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
_

逆にするには、ここでtruefalseと交換します。完全な呼び出しは、たとえば次のようになります。

_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>
_
24
slhck

ありがとうslhckあなたの答えに感謝します。

だから私はショートカットが好きなので、Automatorを使って「Run Shell Script」サービスを作成しました。

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

次に、Finder-> Services Preferencesに行き、サービスへのショートカットを追加しました。

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

それが役に立てば幸い。 =)

4
Flurin Arner

現在非表示になっているファイル拡張子を表示する場合は、もう1つのオプションがあります。Finderはこの「拡張子を非表示にする」オプションをcom.Apple.FinderInfo拡張ファイル属性に保存します。すべての拡張属性をリストする次のコマンドを実行して、自分で確認できます。

xattr -l /path/to/the/file

したがって、拡張子を表示するには、その属性を削除できます。

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

ただし、この属性にはFinder 他のメタデータを保存 タグの色などが含まれているため、このメタデータは失われることに注意してください。また、属性はバイナリであるため、簡単に変更することはできません。

1
skozin

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
0
dardo82

コマンドラインで引数を1つだけにするため($ hideextension ~/music/somesong.mp3)、applescriptをシェルスクリプトにすることができます。 Shebangでosascriptを使用することは可能です(#!/usr/bin/osascript)次のコードのように。続行します :

  1. .scptファイルでapplescriptコードをテストする=> toggle_hidden_​​extension.scpt
  2. 問題がなければ、シバン(#!/usr/bin/osascript)ファイルの先頭
  3. ファイル形式「テキスト」でエクスポートします=> 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
boissonnfive