Скрипт Mac для скрытия / показа скрытых файлов - PullRequest
2 голосов
/ 14 октября 2011

Я очень плохо знаком с сценариями оболочки Mac, но я написал это для переключения скрытия / отображения скрытых файлов на Mac. (Затем наденьте приложение автоматизатора). Это хорошее решение?

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

Ответы [ 5 ]

2 голосов
/ 22 марта 2015

Если вы хотите быстрый способ показать / скрыть скрытые файлы из терминала в Mac, добавьте следующие строки в файл .bash_profile в вашем домашнем каталоге:

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";

Закройте и откройте новый терминалОкно для новых команд alias вступит в силу, затем вы можете быстро набрать "hid" -Tab для автоматического завершения

$ hidden-files-show
$ hidden-files-hide
2 голосов
/ 17 августа 2013

Я использую такой скрипт:

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

Я не знаю, будет ли killall Finder такой опасной. Он посылает Finder сигнал TERM, который обычно может быть перехвачен процессом, чтобы окончательно завершиться. Начиная с 10.8, Finder не поддерживает внезапное завершение, но если это так, то можно с уверенностью даже отправить ему сигнал KILL.

1 голос
/ 12 июля 2014

Что бы это ни стоило, в моем файле .bash_profile для этого есть следующее, аналогично @ 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"'
}

, поэтому я могу вызвать его из Терминала.(Примечание: если вы запустите его на компьютере, где AppleShowAllFiles никогда не было установлено, вы получите жалобу при первом запуске, аля:

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

, но все будет хорошо. Iсчитаю, что он по умолчанию находится в NSGlobalDomain, но это устанавливает его в пользовательском.)

1 голос
/ 16 августа 2013

Этот вопрос старый, но вот хорошее решение с использованием вашего кода:

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

Это аналогичный метод для поиска искателя, но он более лаконичен, чем Paul R . Пол, если ты видишь это, и я пропускаю любые потенциальные проблемы, пожалуйста , дай мне знать.

В качестве альтернативы вы можете использовать:

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'
1 голос
/ 14 октября 2011

Вместо killall Finder, что несколько экстремально и опасно (вы можете убить Finder во время копирования файла или других операций ввода-вывода). Вместо этого вы можете просто отправить AppleEvent в Finder и сказать ему обновить данное окно. Например. Чтобы обновить самое переднее окно, вы можете сделать это в AppleScript:

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

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

Вы можете легко настроить это, чтобы обновить каждое открытое окно Finder, если это то, что вам нужно.

Чтобы запустить код AppleScript, такой как приведенный выше, из скрипта bash, вы можете использовать инструмент командной строки osascript , например,

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