簡體   English   中英

LINUX:列出所有目錄,推入bash數組

[英]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.

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