【问题标题】:Mac shell script to hide/show hidden files用于隐藏/显示隐藏文件的 Mac shell 脚本
【发布时间】:2011-10-14 09:30:28
【问题描述】:

我对 mac shell 脚本非常陌生,但我写这个是为了在 mac 上切换隐藏/显示隐藏文件。 (然后装上automator应用)这是一个好的解决方案吗?

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

【问题讨论】:

  • 杀死 Finder 进程有点极端——如果 Finder 正在做某事会发生什么?
  • 可能有点极端,但是如果不重新启动finder,就无法从隐藏文件更改为显示文件(并返回)。
  • 嗯,我希望你有备份!
  • 您可以通过使用 Apple 菜单命令注销来重新启动 Finder:“注销...” 如果您不想这样做,可以选中复选框:“重新登录时重新打开窗口”失去你的位置。

标签: macos shell automator hidden-files


【解决方案1】:

我正在使用这样的脚本:

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 信号应该是安全的。

【讨论】:

    【解决方案2】:

    如果您想在 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
    

    【讨论】:

      【解决方案3】:

      而不是killall Finder,这有点极端和危险(您可能会在文件复制或其他 I/O 操作的过程中杀死 Finder)。相反,您可以向 Finder 发送一个 AppleEvent 来告诉它刷新给定的窗口。例如。要刷新最前面的窗口,您可以在 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 窗口。

      要从 bash 脚本运行上述 AppleScript 代码,您可以使用osascript 命令行工具,例如

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

      【讨论】:

      • 当我尝试运行defaults write com.apple.finder AppleShowAllFiles -bool true; osascript -e 'tell windows of app "Finder" to update items with necessity' 时,Finder 中没有显示隐藏文件。我错过了什么吗?
      【解决方案4】:

      这个问题很老,但这是使用您的代码的一个很好的解决方案:

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

      类似于关闭finder的方法,但比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'
      

      【讨论】:

        【解决方案5】:

        对于它的价值,我的 .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 的机器上运行它,你会在第一次运行时收到投诉,ala:

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

        但一切都会好起来的。我相信它默认存在于NSGlobalDomain 中,但这会将它设置在用户的。 )

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-24
          • 2013-02-23
          • 1970-01-01
          • 1970-01-01
          • 2018-06-03
          • 1970-01-01
          相关资源
          最近更新 更多