2011-09-26 81 views
0

我需要在OS X用戶目錄中運行一些命令,除了「共享」和我們的本地管理員帳戶。 到目前爲止,我有:如何在使用bash的目錄列表中運行命令?

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

運行上面的根,我得到

mkdir: /Users/mactest1: File exists 

如果可能我會錯誤?

回答

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 
+0

你可以使用'find'的'exec'選項以及我猜...這些行上的某些東西可能是:'find/Users/-type d -depth 1!名稱支持! -name共享-exec mkdir {}/Desktop/flagFolderForLoop \;'擺脫'for'循環。順便說一句,在我使用的Ubuntu系統中,'find'沒有稱爲'depth'的選項,而是具有'maxdepth',雖然不確定OSX –

0

相反的find可以使用dscl列出(常規,標準)/Users在Mac OS X上。

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}'