请用 Bash 脚本

请用 Bash 脚本

脚本本身相当清晰易懂。这个脚本还能进一步改进吗?

第一个版本是在 OS X 10.5.8 Leopard 上编写的,当前版本是在 OS X 10.6.4 Snow Leopard 上运行的,使用的是 Safari 5.0.2 (6533.18.5)。另外,有没有解释一下为什么第一行“if [ -f ]”可以工作,而“if [ -f ~/Library/Safari/LocalStorage/*.localstorage ]”却会产生错误?[是的,我有点菜鸟]

代码:

#! /bin/bash
# SafariClear0.0.6

if [ -f ]
then
cat /dev/null > ~/Library/Safari/LocalStorage/*.localstorage
rm -f ~/Library/Safari/LocalStorage/*.localstorage
fi

if [ -f ~/Library/Safari/LocalStorage/*.localstorage ]
then
echo "Oy vey!"  
fi
cd ~/Library/Safari/
cat /dev/null > WebpageIcons.db
cat /dev/null > TopSites.plist
cat /dev/null > LocationPermissions.plist
cat /dev/null > LastSession.plist
cat /dev/null > History.plist
echo "Clear"
exit

答案1

这看起来将被关闭,不知道为什么,可能是因为这是超级用户的编程问题。

1) 测试 [ -f ] 没有意义。-f 测试用于测试某物是否是文件并且存在。使用 -f 而没有文件则不执行任何操作。

2) 判断“一个目录是否包含一个或多个文件”比乍一看要难得多。幸运的是,你其实并不需要这么做。请参阅下面的第 3 点。

3) 第一部分代码会截断文件,然后将其删除。为什么要费心截断呢?只需删除它们即可。您可以执行以下操作:

find ~/Library/Safari/LocalStorage/ -type f -name '*.localstorage' -exec rm -f {} \;

4) 然后,您截断一些其他文件。这可以循环进行,这可能是一种改进。

cd ~/Library/Safari/
for FILE in WebpageIcons.db TopSites.plist LocationPermissions.plist LastSession.plist  History.plist
do
    cat /dev/null > $FILE
done

将这两个代码片段合并到脚本中可以完成脚本所做的所有操作。

答案2

[ -f *.txt ]

  • 如果不存在这样的文件,
    • 如果未启用 shell 选项nullglob(默认),则单词*.txt将保持未扩展状态,并且-f计算结果为 false。
    • 如果启用了 shell 选项,则会删除nullglob单词,留下,这相当于。由于只给出了 1 个参数,因此规则是当且仅当参数不为空时,表达式才为真。不为空,因此表达式为真。*.txt[ -f ]test -f-f
  • 如果存在这样的文件,*.txt则扩展为其名称的列表。
    • 如果只存在一个这样的文件,则-f查看文件名并计算为真。
    • 如果存在两个这样的文件,则第三个参数应为二元运算符(-a-o),并且可能会出现binary operator expected错误。
    • 如果存在三个或更多这样的文件,则会收到too many arguments错误。

要测试与模式匹配的文件是否存在,请参阅此主题

相关内容