簡體   English   中英

如何使用bash在目錄列表中運行命令?

[英]How do I run a command in a list of directories using bash?

除了“ Shared”和我們的本地管理員帳戶,我需要在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

我哪里可能出問題了?

您應該刪除"$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

可以使用dscl列出(常規,標准) /Users Mac OS X上的/Users ,而不是find

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM