我有一個我創建的腳本,它只是一個命令列表(cp's,mkdir's,rm's等)。這樣做基本上是用一個源文件夾的內容更新一堆文件夾的內容。用於命令更新多個文件夾的Linux shell腳本
現在我有大約15個文件夾被修改,每個文件大約有30個命令。所以當我需要添加一個文件夾時,我需要再添加30個命令並指定該文件夾。
腳本中是否有方法創建一個文件夾數組來更改和循環它或什麼?
我的腳本現在只包含通常在命令行中運行的基本命令,所以沒有任何進展。
我有一個我創建的腳本,它只是一個命令列表(cp's,mkdir's,rm's等)。這樣做基本上是用一個源文件夾的內容更新一堆文件夾的內容。用於命令更新多個文件夾的Linux shell腳本
現在我有大約15個文件夾被修改,每個文件大約有30個命令。所以當我需要添加一個文件夾時,我需要再添加30個命令並指定該文件夾。
腳本中是否有方法創建一個文件夾數組來更改和循環它或什麼?
我的腳本現在只包含通常在命令行中運行的基本命令,所以沒有任何進展。
是的,你可以做這樣的事情:
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
如果您具有某個模式的特定名稱,則可以使用循環自動生成該名稱列表。
下面是一個方法:
#!/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)
符號。
這與使用for
循環的答案類似,但使用here文檔來存儲文件夾列表。這就像在腳本中嵌入數據文件。
while read -r folder <&3; do
mkdir "$folder"
# etc
done 3<<EOF
folder1
folder2
folder with space
EOF
我用文件描述符3的位置文件的情況下,你有嘗試從標準輸入讀取的循環體的命令。
謝謝,那正是我所尋找的 – Sean 2013-03-06 19:44:54