这是我想要的最终结果:
我的应用程序的克隆实例有超过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
我如何实现这一目标?
答案 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'