Afficher / masquer l'extension d'un fichier via la ligne de commande OS X

21

Je cherche un moyen, via le terminal, de changer si l'extension d'un fichier spécifique est affichée dans le Finder, quelque chose comme:

$ hideextension ~/music/somesong.mp3

Sans avoir à ouvrir Get Info et à modifier la case à cocher, car c'est très fastidieux.

J'ai l'intention de l'intégrer dans un script que j'appelle via un raccourci à l'aide de FastScripts. Je voudrais essayer de rester à l'écart des scripts GUI car cela semble impur, bien que toutes les idées sur la façon d'accomplir cela soient les bienvenues.

joshua.thomas.bird
la source
Si cela fait une différence, j'essaie d'accomplir cela sur Lion.
joshua.thomas.bird

Réponses:

24

La seule véritable façon de changer cela via l'interface graphique est de cliquer sur Masquer l'extension dans la fenêtre Informations du Finder . Cette vérification modifie l' com.apple.FinderInfoattribut étendu, que vous ne pouvez normalement pas modifier - du moins pas facilement. Nous pouvons cependant utiliser un outil pour le faire pour nous.

Pour que ce qui suit fonctionne, vous devez évidemment avoir Afficher toutes les extensions de fichiers non coché dans les préférences du Finder.


Via AppleScript

AppleScript offre cette fonctionnalité avec la set extension hiddencommande. Vous avez évidemment besoin d'un aliaspour un objet fichier. Nous pouvons obtenir cela, par exemple, via une boîte de dialogue. Voici juste un exemple de travail minimal.

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

Pour inverser, il suffit d'échanger trueavec falseici. L'appel complet est alors, par exemple:

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

Vous pouvez également l'exécuter directement à partir d'un fichier de script (merci @DanielBeck pour l'ajout):

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

Enregistrez-le sous filename.scptet exécutez-le à partir de la ligne de commande avec:

osascript filename.scpt targetfile

Avec la SetFilecommande

Remarque: Ceci est obsolète depuis Xcode 6.

Si vous avez installé Xcode, vous obtiendrez le SetFile(1)binaire, qui fait exactement ce que vous voulez (et offre quelques fonctions supplémentaires liées aux attributs de fichier):

Masquer l'extension:

SetFile -a E <file>

Afficher à nouveau l'extension:

SetFile -a e <file>
slhck
la source
À proprement parler, c'est un alias, pas un fichier. Voici comment utiliser l'AppleScript à partir de la ligne de commande:, on run argv [newline] tell application "Finder" to set extension hidden of (POSIX file (first item of argv) as alias) to true [newline] end runutilisez comme osascript filename.scpt targetfile.
Daniel Beck
1
Vous avez raison, bien sûr. J'ai ajouté l'événement AppleScript complet. À l'avenir, allez-y et ajoutez quelque chose d'important à la réponse - vous êtes toujours le bienvenu.
slhck
1
juste ce que je cherchais .. heureusement, j'ai Xcode installé et SetFile a fait l'affaire :-)
thandasoru
SetFileest obsolète depuis Xcode 6 . Le lien vers la page de manuel a également expiré.
Franklin Yu
@FranklinYu Merci pour l'info. Connaissez-vous un remplaçant?
slhck
4

Merci slhck pour votre réponse, cela m'a aidé un tas à obtenir ce que je voulais faire.

Donc, comme j'aime les raccourcis, j'ai créé un service "Run Shell Script" via Automator.

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

Ensuite, je suis allé au Finder -> Préférences des services et j'ai ajouté un raccourci vers le service.

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

J'espère que cela aide. =)

Flurin Arner
la source
La STATUS=ligne manque une coche arrière à la fin. De plus, sur mon Mac + XCode, la commande GetFileInfoa un G. majuscule
bjnord
1

Il existe une autre option si vous souhaitez afficher l'extension de fichier actuellement masquée: le Finder stocke cette option "masquer l'extension" dans l' com.apple.FinderInfoattribut de fichier étendu. Vous pouvez le vérifier vous-même en exécutant cette commande qui répertorie tous les attributs étendus:

xattr -l /path/to/the/file

Ainsi, afin d'afficher l'extension, vous pouvez supprimer cet attribut:

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

Mais gardez à l'esprit que le Finder stocke d'autres métadonnées telles que la couleur des balises dans cet attribut, donc ces métadonnées seront perdues. Et, comme l'attribut est binaire, vous ne pouvez pas le modifier facilement.

skozin
la source
0

Afin d'avoir un seul argument sur la ligne de commande ( $ hideextension ~/music/somesong.mp3), vous pouvez faire de votre applescript un script shell. Il est possible d'utiliser osascript dans le shebang ( #!/usr/bin/osascript) comme dans le code suivant. Procéder :

  1. Testez votre code applescript dans un fichier .scpt => toggle_hidden_extension.scpt
  2. Lorsque OK, ajoutez le shebang ( #!/usr/bin/osascript) au début du fichier
  3. Exportez-le au format de fichier "text" => toggle_hidden_extension.applescript
  4. Remplacez l'extension par .sh => toggle_hidden_extension.sh
  5. Dans Terminal, rendez-le exécutable:

    chmod u+x toggle_hidden_extension.sh
    
  6. Vous pouvez maintenant l'exécuter:

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

Donc, le code pour illustrer:

#!/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
boissonnfive
la source
0

Même s'il SetFileest obsolète depuis Xcode 6, il est toujours disponible dans XCode 11, vous pouvez donc vous attendre à ce qu'il reste dans les outils de ligne de commande dans un avenir prévisible ...

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
dardo82
la source