2013-03-06 150 views
1

我有一个我创建的脚本,它只是一个命令列表(cp's,mkdir's,rm's等)。这样做基本上是用一个源文件夹的内容更新一堆文件夹的内容。用于命令更新多个文件夹的Linux shell脚本

现在我有大约15个文件夹被修改,每个文件大约有30个命令。所以当我需要添加一个文件夹时,我需要再添加30个命令并指定该文件夹。

脚本中是否有方法创建一个文件夹数组来更改和循环它或什么?

我的脚本现在只包含通常在命令行中运行的基本命令,所以没有任何进展。

回答

2

是的,你可以做这样的事情:

for x in "folder1" "folder2" "folder3"; do 
    mkdir $x 
    cp foobar $x 
done 

更重要的是,使用一个数组来保存文件夹名称,例如

arr=("folder1" "folder2" "folder3") 

for x in ${arr[*]} do 
    mkdir $x 
    cp foobar $x 
done 

如果您具有某个模式的特定名称,则可以使用循环自动生成该名称列表。

+0

谢谢,那正是我所寻找的 – Sean 2013-03-06 19:44:54

1

下面是一个方法:

#!/bin/bash 

# This function does all you clever stuff 
# $1 contains the first parameter, $2 the second and so on 
function my_cmds() 
{ 
    echo $1 
} 

# You can loop over folders like this 
for i in folder1 folder2 folder3 
do 
    # here we call a function with the string as parameter 
    my_cmds $i 
done 

# ... or like this 
folders[0]="folder0" 
folders[1]="folders1" 
folders[2]="folders2" 

for i in "${folders[@]}" 
do 
    my_cmds $i 
done 

初始化整个阵列的一个方便的方法是

array=(element1 element2 ... elementN) 

符号。

0

这与使用for循环的答案类似,但使用here文档来存储文件夹列表。这就像在脚本中嵌入数据文件。

while read -r folder <&3; do 
    mkdir "$folder" 
    # etc 
done 3<<EOF 
folder1 
folder2 
folder with space 
EOF 

我用文件描述符3的位置文件的情况下,你有尝试从标准输入读取的循环体的命令。