LINUX:列出所有目录,推入bash数组

时间:2011-01-18 04:19:57

标签: linux arrays bash scripting

这是我想要的最终结果:

我的应用程序的克隆实例有超过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 

我如何实现这一目标?

4 个答案:

答案 0 :(得分:7)

这样做:

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/

答案 1 :(得分:3)

以下脚本将遍历/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

答案 2 :(得分:1)

链接到源目录可能更容易,然后您可以在一个地方更新它。

只需设置每个用户目录,以便公共文件全部从名为common_files(或任何你喜欢的)的目录中提取,然后在每个主目录中运行此命令:

ln -s /location/of/files/they/need common_files

更新/位置/ / files /他们/需要它会自动传播。

答案 3 :(得分:0)

使用bash,你可以让它变得非常简短。列出当前目录并将其存储到数组中:

ls . | readarray i

ls . | bash -c 'readarray i'

使用数据:

ls . | bash -c 'readarray i && for j in ${i[*]}; do <-command->; done'