На работе у нас есть 7 или 8 жестких дисков, которые мы отправляем по стране, каждая из которых имеет уникальные метки, которые не являются последовательными.BASH, множественные массивы и петля
Идеальные диски подключены к нашему компьютеру, а затем получают папки с сервера, соответствующие имени накопителя.
Иногда только один жесткий диск подключается, иногда кратно, возможно, в будущем будет добавлено больше.
Каждый монтируется в/Тома/и его идентификатор; например,/Volumes/f00, где f00 - идентификатор.
Что я хочу сказать, сканирует тома, если какие-либо диски подключены к сети, а затем проверьте сервер на наличие папки, если она копирует папку и рекурсивные папки.
Вот то, что я до сих пор, он проверяет, является ли диск существует в томах:
#!/bin/sh
#Declare drives in the array
ARRAY=(foo bar long)
#Get the drives from the array
DRIVES=${#ARRAY[@]}
#Define base dir to check
BaseDir="/Volumes"
#Define shared server fold on local mount points
#I plan to use AFP eventually, but for the sake of ease
#using a local mount.
ServerMount="BigBlue"
#Define folder name for where files are to come from
Dispatch="File-Dispatch"
dir="$BaseDir/${ARRAY[${i}]}"
#Loop through each item in the array and check if exists on /Volumes
for ((i=0;i<$DRIVES;i++));
do
dir="$BaseDir/${ARRAY[${i}]}"
if [ -d "$dir" ]; then
echo "$dir exists, you win."
else
echo "$dir is not attached."
fi
done
То, что я не могу понять, как сделать, как проверить томов для сервера при прохождении через точки крепления жесткого диска.
Так что я мог бы сделать что-то вроде:
#!/bin/sh
#Declare drives, and folder location in arrays
ARRAY=(foo bar long)
#Get the drives from the array
DRIVES=${#ARRAY[@]}
#Define base dir to check
BaseDir="/Volumes"
#Define shared server fold on local mount points
ServerMount="BigBlue
#Define folder name for where files are to come from
Dispatch="File-Dispatch"
dir="$BaseDir/${ARRAY[${i}]}"
#List the contents from server directory into array
ARRAY1=($(ls ""$BaseDir"/"$ServerMount"/"$Dispatch""))
SERVERFOLDER=${#ARRAY1[@]}
echo ${list[@]}
for ((i=0;i<$DRIVES;i++)); ((i=0;i<$SERVERFOLDER;i++));
do
dir="$BaseDir/${ARRAY[${i}]}"
ser="${ARRAY1[${i}]}"
if [ "$dir" =~ "$sir" ]; then
cp "$sir" "$dir"
else
echo "$dir is not attached."
fi
done
Я знаю, что это очень неправильно ... ну очень, но я надеюсь, что это дает вам представление о том, что я пытаюсь достичь.
Любые идеи или предложения?
Извините, половина этих ошибок пришла от меня, когда я ленился, когда копировал здесь и редактировал, но спасибо, я тоже попробую это. Я знал для ((i = 0; i <$ DRIVES; i ++)); ((i = 0; i <$ SERVERFOLDER; i ++)); это неправильно, но это то, что я хотел сделать. Вы помогаете с некоторыми из моих вопросов за последний месяц. – S1syphus