Mac删除多个文件Bash

时间:2016-01-28 15:31:25

标签: macos bash shell uninstall uninstaller

我正在尝试通过删除安装程序安装的所有文件来卸载程序。这是我尝试过的脚本,但是当我尝试运行它时,它会在Too many arguments行(用6突出显示)上返回“**”错误。

通过Apple Remote Desktop将其部署到多台计算机上。

我想把它放在一个包中运行,但是作为可执行脚本也可以完成这项工作。我错了吗?这不是整个脚本,但它遵循相同的模式。

#!/bin/bash

## This will uninstall ETC Nomad v2.3.3.9.0.10.mpkg
## From Contents of ETCnomad Eos Mac 2.3.3.9.0.10.pkg

**if [ -d /Applications/Eos Family Welcome Screen.app ]; then**
/bin/rm -rf /Applications/Eos Family Welcome Screen.app
fi

if [ -f /tmp/Element_Hotkeys.pdf ]; then
/bin/rm -rf /tmp/Element_Hotkeys.pdf
fi

if [ -f /tmp/Eos_Hotkeys.pdf ]; then
/bin/rm -rf /tmp/Eos_Hotkeys.pdf
fi

if [ -f /tmp/FixtureReleaseNotes.pdf ]; then
/bin/rm -rf /tmp/FixtureReleaseNotes.pdf
fi

if [ -f usr/local/etc/DCIDTable ]; then
/bin/rm -rf usr/local/etc/DCIDTable
fi

exit 0

1 个答案:

答案 0 :(得分:3)

答案

在包含空格的路径/文件名周围使用',否则shell会尝试将这些部分解释为与文件名不同而感到困惑,因此会出现错误消息。

更多评论

  • 正如jubobs指出的那样,在删除之前测试文件是否存在是没有用的。此外,您已使用-f选项忽略不存在的文件,因此测试变得无关紧要。
  • 从命令中删除绝对路径,以保持脚本的可移植性。 shell的PATH环境变量用于在正确的位置搜索命令。
  • 无需从/tmp/删除文件,因为操作系统会为您执行此操作。
  • 当您修改/usr/等系统文件夹时要小心,因为每次系统升级都会覆盖它们,而且通常很难说出所有依赖项。

您可以简化脚本:

#!/bin/bash

## This will uninstall ETC Nomad v2.3.3.9.0.10.mpkg
## From Contents of ETCnomad Eos Mac 2.3.3.9.0.10.pkg

rm -rf '/Applications/Eos Family Welcome Screen.app'
# rm -rf /tmp/Element_Hotkeys.pdf
# rm -rf /tmp/Eos_Hotkeys.pdf
# rm -rf /tmp/FixtureReleaseNotes.pdf
rm -rf /usr/local/etc/DCIDTable

exit 0