1

私が作成したスクリプトは、コマンド (cp、mkdir、rm など) の単なるリストです。これが行うことは、基本的に、ソース フォルダーの内容で多数のフォルダーの内容を更新することです。

現在、それぞれ約 30 個のコマンドで変更する約 15 個のフォルダーがあります。そのため、フォルダーを追加する必要がある場合は、さらに 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

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ますが、ヒア ドキュメントを使用してフォルダーのリストを保存します。これは、スクリプトにデータ ファイルが埋め込まれているようなものです。

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 に答える