我需要在OS X用户目录中运行一些命令,除了“共享”和我们的本地管理员帐户。 到目前为止,我有:
#!/bin/bash
userFolders=$(find /Users/ -type d -depth 1 | sed -e 's/\/\//\//g' | egrep -v "support|Shared")
for PERSON in "$userFolders"; do
mkdir $PERSON/Desktop/flagFolderForLoop
done
以root身份运行上面的内容,我得到
mkdir: /Users/mactest1: File exists
我哪里可能出错?
答案 0 :(得分:1)
您应该删除"$userFolders"
周围的引号,以便您的循环正确迭代每个人。
以下示例说明了引用和不引用之间的区别:
引用:
for i in "a b c"
do
echo "Param: $i"
done
只打印一个参数:
Param: a b c
没有引号:
for i in a b c
do
echo "Param: $i"
done
打印每个参数:
Param: a
Param: b
Param: c
此外,您可以告诉find
排除某些目录,例如:
for PERSON in $(find /Users/ -type d -depth 1 ! -name support ! -name Shared)
do
mkdir "$PERSON"/Desktop/flagFolderForLoop
done
答案 1 :(得分:0)
您可以使用find
在Mac OS X上列出(常规,标准)dscl
,而不是/Users
。
dscl . -list /Users NFSHomeDirectory
# list name of users
dscl . -list /Users NFSHomeDirectory |
awk '/^[^[:space:]]+[[:space:]]+\/Users\//{print $1}'
# list home directories of users
dscl . -list /Users NFSHomeDirectory |
awk '/^[^[:space:]]+[[:space:]]+\/Users\//{$1=""; sub(/^ */,""); print $0}'