[英]LINUX: List all directories, push into a bash array
這是我想要的最終結果:
我有超過15個用戶的克隆應用程序的實例,有時我需要更新文件(它們幾乎保持不變 - 一切都是動態的。這是更新/新功能)。 我寫了一個非常簡單的bash腳本,我必須手動將每個用戶從/ home /放入數組中。 但我需要這個擴展。
如何獲取目錄列表(類似於LS命令)僅將DIRECTORY名稱提供給bash數組。 可能我會在bash文件中想要這個命令,因為我希望它抓住/ home /目錄中的所有用戶,推入陣列(例如:webUsers(adam john jack)
這是我當前腳本的樣子快照(非動態用戶列表)
webUsers( adam john jack )
for i in "${webUsers[@]}"
do
cp /home/mainSource/public_html/templates/_top.tpl /home/$i/public_html/templates
done
我該如何實現這一目標?
做這個:
webUsers=(/home/*/)
內容如下:
$ declare -p webUsers
declare -a webUsers='([0]="/home/adam/" [1]="/home/jack/" [2]="/home/john")'
$ echo ${webUsers[1]}
/home/jack/
或者,如果您不想要父目錄:
pushd /home
webUsers=(*/)
popd
你會得到:
$ declare -p webUsers
declare -a webUsers='([0]="adam/" [1]="jack/" [2]="john")'
$ echo ${webUsers[1]}
jack/
以下腳本將遍歷包含/home
目錄的所有用戶。 它還將無條件地嘗試創建/public_html/templates
目錄。 如果它還不存在,它將被創建。 如果確實存在,則此命令基本上不執行任何操作。
#!/bin/bash
cd /home
userarr=( */ );
for user in "${userarr[@]%*/}"; do
mkdir -p "/home/${user}/public_html/templates"
cp "/home/mainSource/public_html/templates/_top.tpl /home/${user}/public_html/templates"
done
鏈接到源目錄可能更容易,然后您可以在一個位置更新它。
只需設置每個用戶目錄,以便公共文件都從名為common_files(或任何你喜歡的)的目錄中提取,然后在每個主目錄中運行此命令:
ln -s /location/of/files/they/need common_files
更新/位置/ / files /他們/需要它自動傳播。
有了bash,你實際上可以做到這么短而簡單。 列出當前目錄並將其存儲到數組中:
ls . | readarray i
要么
ls . | bash -c 'readarray i'
要使用數據:
ls . | bash -c 'readarray i && for j in ${i[*]}; do <-command->; done'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.