LINUX:列出所有目录,将其推入Bash数组

3

这是我想要的最终结果:

我有超过15个克隆实例的应用程序用户,有时需要更新文件(它们基本上都保持不变-一切都是动态的。这是用于更新/新功能)。我编写了一个相当简单的bash脚本,需要手动将每个用户从/home/放入数组中。但我需要让它扩展。

如何将目录列表(类似LS命令)仅提取目录名称,然后将其输入到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个回答

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/

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

有没有办法检查我的“public_html/templates”目录是否存在。可能有一些情况下它们不存在,例如我的用户。 - Snow_Mac
@user 更新了答案以处理public_html/templates文件夹。 - SiegeX

1

将源目录链接起来可能更容易,这样你就可以在一个地方更新它。

只需设置每个用户目录,使得所有共享文件都从名为common_files(或其他你喜欢的名称)的目录中提取,然后在每个主目录中运行此命令:

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

更新/所需文件的位置,它会自动传播。


0

使用Bash,您可以使此过程变得非常简短和简单。要列出当前目录并将其存储到数组中:

ls . | readarray i

或者

ls . | bash -c 'readarray i'

使用数据:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接