2011-10-14 3 views
2

Je suis très nouveau dans le script de shell Mac, mais j'ai écrit ceci pour basculer cacher/afficher les fichiers cachés sur mac. (Puis mettre sur l'application de l'automateur) Est-ce une bonne solution?Script shell Mac pour cacher/montrer les fichiers cachés

#!/bin/sh 

view=$(defaults read com.apple.finder AppleShowAllFiles) 

if [ "$view" = "1" ] 
then 
defaults write com.apple.finder AppleShowAllFiles -bool false 
else 
defaults write com.apple.finder AppleShowAllFiles -bool true 
fi 
killall Finder 
+0

Interrompre la Finder est un peu extrême - ce qui se passe si le Finder est au milieu de faire quelque chose? –

+0

Probablement un peu extrême, mais il n'est pas possible de passer des fichiers cachés aux fichiers affichés (et inversement) sans avoir à redémarrer le finder. –

+0

Eh bien, j'espère que vous avez des sauvegardes! –

Répondre

1

Au lieu de killall Finder, ce qui est un peu extrême et dangereux (vous pouvez tuer le Finder au milieu de la copie de fichiers ou d'autres opérations d'E/S). Au lieu de cela, vous pouvez simplement envoyer un AppleEvent au Finder pour lui demander d'actualiser une fenêtre donnée. Par exemple. pour actualiser la fenêtre, vous pouvez le faire en avant dans ce AppleScript:

tell application "Finder" 
    tell front window 
    update every item with necessity 
    end tell 
end tell 

(de http://hints.macworld.com/article.php?story=2009091413423819)

Vous pouvez facilement adapter ce pour rafraîchir toutes les fenêtres ouvertes du Finder si c'est ce dont vous avez besoin. Pour exécuter un code AppleScript tel que ci-dessus à partir d'un script bash, vous pouvez utiliser l'outil de ligne de commande osascript, par ex.

osascript <<EOF 
tell application "Finder" 
    tell front window 
    update every item with necessity 
    end tell 
end tell 
EOF 
+0

Lorsque j'ai essayé d'exécuter defaults, écrivez com.apple.finder AppleShowAllFiles -bool true; osascript -e 'dit fenêtres de l'application "Finder" pour mettre à jour les éléments avec nécessité ", les fichiers cachés ne sont pas montrés dans le Finder. Est-ce que je manque quelque chose? – user495470

1

Cette question est ancienne, mais voici une bonne solution en utilisant votre code:

osascript -e 'tell app "Finder" to quit' 

Il est méthode similaire pour finder fermeture, mais elle est plus concise que la réponse de Paul R. Paul, si vous voyez cela et que je manque des problèmes potentiels, s'il vous plaît faites le moi savoir.

Alternativement, vous pouvez utiliser:

STATUS=`defaults read com.apple.finder AppleShowAllFiles` 
if [ $STATUS == TRUE ]; 
then 
defaults write com.apple.finder AppleShowAllFiles FALSE 
else 
defaults write com.apple.finder AppleShowAllFiles TRUE 
fi 
osascript -e 'tell app "Finder" to quit' 
2

J'utilise un script comme ceci:

do shell script "x=$(defaults read com.apple.finder AppleShowAllFiles) 
[ $x = 1 ] && b=false || b=true 
defaults write com.apple.finder AppleShowAllFiles -bool $b" 
tell application "Finder" 
    quit 
    delay 0.1 -- without this there was a "connection is invalid" error 
    launch -- without this Finder was not made frontmost 
    activate -- make Finder frontmost 
    reopen -- open a default window 
end tell 

Je ne sais pas si killall Finder serait que ce soit dangereux. Il envoie au Finder un signal TERM, qui peut généralement être intercepté par un processus afin de se terminer proprement. Le Finder ne prend pas en charge la terminaison soudaine à partir de 10.8, mais si tel était le cas, il devrait être sûr de lui envoyer un signal KILL.

0

Pour ce qu'il vaut la peine, je suit dans mon .bash_profile pour ce faire, semblable à @SwankyLegg

togglehidden() { 
    STATUS=`defaults read com.apple.finder AppleShowAllFiles` 
    if [ $STATUS == TRUE ]; 
    then 
    defaults write com.apple.finder AppleShowAllFiles FALSE 
    else 
    defaults write com.apple.finder AppleShowAllFiles TRUE 
    fi 
    osascript -e 'tell app "Finder" to quit' 
    sleep 1 
    osascript -e 'launch app "Finder"' 
} 

si je peux l'appeler à partir du terminal. (NB, si vous l'exécutez sur une machine où AppleShowAllFiles n'a jamais été défini, vous aurez une plainte la première fois que vous exécutez, ala:

XXXXXXXXX defaults[2228:124111] 
The domain/default pair of (/Users/xxx/Library/Preferences/com.apple.finder, AppleShowAllFiles) does not exist 

, mais tout va bien se passer, je crois qu'il vit. dans le NSGlobalDomain par défaut, mais cela le définit dans l'utilisateur.)

2

Si vous voulez un moyen rapide pour afficher/masquer les fichiers cachés du Terminal dans Mac, ajoutez les lignes ci-dessous à votre fichier .bash_profile dans votre répertoire personnel:

alias hidden-files-show="defaults write com.apple.finder AppleShowAllFiles YES; killall Finder"; 
alias hidden-files-hide="defaults write com.apple.finder AppleShowAllFiles NO; killall Finder"; 

fermer et ouvrir une nouvelle fenêtre Terminal pour les nouvelles commandes alias prennent effet, vous pouvez taper rapidement « caché » à -Tab automatique complet

$ hidden-files-show 
$ hidden-files-hide 
Questions connexes