1

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

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

脚本中有没有办法创建一组文件夹来更改和循环遍历它或其他什么?

我的脚本现在只包含通常在命令行中运行的基本命令,所以没有什么高级的。

4

3 回答 3

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

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

于 2013-03-06T19:29:01.360 回答
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 )

符号。

于 2013-03-06T19:32:39.430 回答
0

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

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

我将文件描述符 3 用于此处文档,以防循环主体中有尝试从标准输入读取的命令。

于 2013-03-06T20:05:08.537 回答