Mostra / nascondi l'estensione di un file tramite la riga di comando di OS X.


21

Sto cercando un modo, tramite terminale, per cambiare se l'estensione del file specifico viene mostrata o meno nel Finder, qualcosa sulla falsariga di:

$ hideextension ~/music/somesong.mp3

Senza dover aprire Ottieni informazioni e modificare la casella di controllo, poiché è enormemente noioso.

Ho intenzione di incorporarlo in uno script che sto chiamando tramite un collegamento utilizzando FastScripts. Mi piacerebbe provare a stare lontano dallo scripting della GUI perché sembra impuro, anche se qualsiasi idea su come realizzare questo è benvenuta.


Se fa la differenza, sto provando a farlo su Lion.
joshua.thomas.bird,

Risposte:


24

L'unico vero modo per modificarlo tramite la GUI è fare clic su Nascondi estensione nella finestra Informazioni sul Finder . La verifica di questo cambia l' com.apple.FinderInfoattributo esteso, che normalmente non è possibile modificare, almeno non facilmente. Possiamo tuttavia utilizzare uno strumento per farlo per noi.

Affinché ciò che segue funzioni, è ovviamente necessario che l'opzione Mostra tutte le estensioni dei file sia deselezionata nelle preferenze di Finder.


Tramite AppleScript

AppleScript offre questa funzionalità con il set extension hiddencomando. Ovviamente hai bisogno aliasdi un oggetto file. Possiamo ottenerlo, ad esempio, attraverso una finestra di dialogo. Ecco solo un esempio minimo di lavoro.

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

Per invertire, basta scambiare truecon falsequi. La chiamata completa è quindi, ad esempio:

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

Puoi eseguirlo direttamente anche da un file di script (grazie @DanielBeck per l'aggiunta):

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

Salvalo come filename.scpted eseguilo dalla riga di comando con:

osascript filename.scpt targetfile

Con il SetFilecomando

Nota: questo è obsoleto dal Xcode 6.

Se hai Xcode installato, otterrai il SetFile(1)binario, che fa esattamente quello che vuoi (e offre alcune altre funzioni relative agli attributi del file):

Nascondi estensione:

SetFile -a E <file>

Mostra di nuovo l'estensione:

SetFile -a e <file>

A rigor di termini, è un alias, non un file. Ecco come utilizzare AppleScript dalla riga di comando:, on run argv [newline] tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true [newline] end runusa as osascript filename.scpt targetfile.
Daniel Beck

1
Hai ragione, ovviamente. Ho aggiunto l'evento AppleScript completo. In futuro, vai avanti e aggiungi qualcosa di importante alla risposta: sei sempre il benvenuto.
slhck,

1
proprio quello che stavo cercando .. per fortuna ho installato Xcode e SetFile ha fatto il trucco :-)
thandasoru

SetFileè obsoleto dal Xcode 6 . Anche il link alla pagina del manuale è scaduto.
Franklin Yu,

@FranklinYu Grazie per le informazioni. Conosci un sostituto?
slhck

4

Grazie slhck per la tua risposta, mi ha aiutato un sacco a ottenere ciò che volevo fare.

Quindi, poiché mi piacciono le scorciatoie, ho creato un servizio "Run Shell Script" tramite Automator.

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

Quindi sono andato a Finder -> Preferenze servizi e ho aggiunto un collegamento al servizio.

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

Spero che sia d'aiuto. =)


Alla STATUS=linea manca un segno di spunta alla fine. Inoltre, sul mio Mac + XCode, il comando GetFileInfoha la maiuscola G.
bjnord

1

Esiste un'altra opzione se si desidera mostrare l'estensione del file attualmente nascosta: Finder memorizza questa opzione "nascondi estensione" nell'attributo di com.apple.FinderInfofile esteso. Puoi verificarlo tu stesso eseguendo questo comando che elenca tutti gli attributi estesi:

xattr -l /path/to/the/file

Quindi, per mostrare l'estensione, puoi rimuovere quell'attributo:

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

Ma tieni presente che Finder memorizza altri metadati come il colore dei tag in questo attributo, quindi questi metadati andranno persi. E poiché l'attributo è binario, non è possibile modificarlo facilmente.


0

Per avere solo un argomento sulla riga di comando ( $ hideextension ~/music/somesong.mp3), puoi fare in modo che il tuo applecript diventi uno script di shell. È possibile utilizzare osascript in shebang ( #!/usr/bin/osascript) come nel seguente codice. Procedere :

  1. Metti alla prova il tuo codice applecript in un file .scpt => toggle_hidden_extension.scpt
  2. Quando è OK, aggiungi shebang ( #!/usr/bin/osascript) all'inizio del file
  3. Esportalo con il formato file "text" => toggle_hidden_extension.applescript
  4. Cambia l'estensione in .sh => toggle_hidden_extension.sh
  5. In Terminale, rendilo eseguibile:

    chmod u+x toggle_hidden_extension.sh
    
  6. Ora puoi eseguirlo:

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

Quindi, il codice per illustrare:

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

Anche se SetFileè deprecato poiché Xcode 6 è ancora disponibile in XCode 11, quindi puoi aspettarti che rimanga negli Strumenti da riga di comando per il futuro prevedibile ...

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.