Mostra / oculta a extensão de um arquivo através da linha de comando do OS X

17

Estou procurando um caminho, via terminal, para alterar se a extensão de um arquivo específico é mostrada no Finder, algo como:

$ hideextension ~/music/somesong.mp3

Sem ter que abrir Obter informações e alterar a caixa de seleção, pois é extremamente entediante.

Eu pretendo incorporá-lo em um script que estou chamando através de um atalho usando FastScripts. Eu gostaria de tentar ficar longe dos scripts da GUI, pois isso parece impuro, embora qualquer idéia de como fazer isso seja bem-vinda.

    
por joshua.thomas.bird 12.03.2012 / 21:17

3 respostas

21

A única maneira real de alterar isso via GUI é clicar em Ocultar extensão na janela do Finder Info . Verificar isso altera o atributo com.apple.FinderInfo extended, que você normalmente não pode editar, pelo menos não facilmente. Podemos, no entanto, usar uma ferramenta para fazer isso por nós.

Para que o abaixo funcione, você obviamente precisa ter Mostrar todas as extensões de arquivo desmarcadas nas preferências do Finder.

Através do AppleScript

O AppleScript oferece essa funcionalidade com o comando set extension hidden . Você obviamente precisa de um alias para um objeto de arquivo. Podemos conseguir isso, por exemplo, através de um diálogo. Aqui está apenas um exemplo mínimo de trabalho.

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

Para reverter, apenas troque true por false aqui. A chamada completa é então, por exemplo:

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

Você pode executar isso diretamente de um arquivo de script também (obrigado @DanielBeck pela adição):

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

Salve isso como filename.scpt e execute-o a partir da linha de comando com:

osascript filename.scpt targetfile

Com o comando SetFile

Note: This is deprecated since Xcode 6.

Se você tiver o Xcode instalado, receberá o binário SetFile(1) , que faz exatamente o que você quer (e oferece mais algumas funções relacionadas aos atributos do arquivo):

Ocultar extensão:

SetFile -a E <file>

Mostrar extensão novamente:

SetFile -a e <file>
    
por 12.03.2012 / 22:16
4

Obrigado slhck pela sua resposta, isso me ajudou muito a conseguir o que eu queria fazer.

Então, como gosto de atalhos, criei um serviço "Executar Shell Script" no Automator.

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

Depois fui ao Finder - > Preferências de Serviços e adicionou um atalho ao Serviço.

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

Espero que ajude. =)

    
por 10.01.2013 / 12:38
0

Para ter apenas um argumento na linha de comando ( $ hideextension ~/music/somesong.mp3 ), você pode fazer com que o seu applescript se torne um shell script. É possível usar o osoftware no shebang ( #!/usr/bin/osascript ) como no código a seguir. Para prosseguir:

  1. Teste seu código applescript em um arquivo .scpt = > toggle_hidden_extension.scpt
  2. Quando estiver OK, adicione o shebang ( #!/usr/bin/osascript ) no início do arquivo
  3. Exporte-o com o formato de arquivo "text" = > toggle_hidden_extension.applescript
  4. Altere a extensão para .sh = > toggle_hidden_extension.sh
  5. No Terminal, torne-o executável:

    chmod u+x toggle_hidden_extension.sh
    
  6. Agora você pode executá-lo:

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

Então, o código para ilustrar:

#!/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
    
por 21.10.2016 / 11:20