我正在开发一个bash脚本到
upload backups on Google Drive
。我使用来自 prasmussen github repo 的 gdrive,我目前正在开发一个 python 脚本以使用服务帐户上传到 Google Workspace
脚本获取 zip 文件(sql 和图像)并根据类型将它们分配给具有名为 /_backup/mysql/ 和 /_backup/images/.
键的关联数组然后是嵌套循环:
the outer loop
遍历两个keys,the inner loop
遍历files.
for FOLDER_PATH in "${!ASS_ARR_FOLDERS_FILES[@]}"; do
echo "FOLDER PATH: $FOLDER_PATH"
for FILE_TO_UPLOAD in ${ASS_ARR_FOLDERS_FILES[$FOLDER_PATH]}; do
这是代码(我只包含了两个 bash 函数):
...
## GLOBALS
SQL_SUBSTRING="sql"
IMG_SUBSTRING="images"
declare -a MOST_RECENT_FILES
declare -A ASS_ARR_FOLDERS_FILES # you must declare it if you want use an associative array
declare -a SQL_FILES
declare -a IMG_FILES
declare -A SPLITTED_FILES # you must declare it if you want use an associative array
TODAY_DATE=$(date +"%Y%m%d")
# The function to upload a file to google drive into a folder already created
function the_uploader_to_parent(){
echo -e "<p> I AM THE UPLOADER. GET READY TO UPLOAD AND SUFFER </p>"
# Create a folder with the name of today date
create_today_folder
python3.7 /_script/py-uploader/main.py -n "$COMPANY" -c "$TODAY_DATE"
for RECENT_FILE in "${MOST_RECENT_FILES[@]}"; do
echo $RECENT_FILE
SPLITTED_RECENT_FILE=($( echo $RECENT_FILE | tr "." "</p>"))
if [[ "${SPLITTED_RECENT_FILE[1]}" == "sql" ]]; then
SQL_FILES+=("$RECENT_FILE")
else
IMG_FILES+=("$RECENT_FILE")
fi
done
ASS_ARR_FOLDERS_FILES["/_backup/mysql/"]="${SQL_FILES[@]}"
ASS_ARR_FOLDERS_FILES["/_backup/images/"]="${IMG_FILES[@]}"
echo "${!ASS_ARR_FOLDERS_FILES[@]}"
echo "${ASS_ARR_FOLDERS_FILES[@]}"
for FOLDER_PATH in "${!ASS_ARR_FOLDERS_FILES[@]}"; do
echo "FOLDER PATH: $FOLDER_PATH"
for FILE_TO_UPLOAD in ${ASS_ARR_FOLDERS_FILES[$FOLDER_PATH]}; do
GET_FILES=($($GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION list --no-header --name-width 0 -q "name contains '$FILE_TO_UPLOAD' and trashed=false and mimeType != 'application/vnd.google-apps.folder'"))
if [[ "$FILE_TO_UPLOAD" != "${GET_FILES[1]}" ]]; then
if [[ "$FOLDER_PATH" == "/_backup/mysql/" ]] && [[ "$FILE_TO_UPLOAD" == *"$SUBSTRING_FILE"* ]]; then
if [ ${FOLDER_PATH:0-1} == "/" ]; then
echo -e "\n FROM upload_in_drive $FILE_TO_UPLOAD for the COMPANY $COMPANY \n"
UPLOAD_OUTPUT=`$GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION upload --no-progress -p $TODAY_FOLDER_ID ${FOLDER_PATH}$FILE_TO_UPLOAD`
echo $UPLOAD_OUTPUT
/usr/bin/python3.7 /_script/py-uploader/main.py -p "$FOLDER_PATH$FILE_TO_UPLOAD" -n "$COMPANY"
else
echo -e "\n FROM upload_in_drive $FILE_TO_UPLOAD for the COMPANY $COMPANY \n"
UPLOAD_OUTPUT=`$GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION upload --no-progress -p $TODAY_FOLDER_ID ${FOLDER_PATH}/$FILE_TO_UPLOAD`
echo $UPLOAD_OUTPUT
/usr/bin/python3.7 /_script/py-uploader/main.py -p "$FOLDER_PATH/$FILE_TO_UPLOAD" -n "$COMPANY"
fi
elif [[ "$FOLDER_PATH" == "/_backup/images/" ]] && [[ "$FILE_TO_UPLOAD" == *"$SUBSTRING_FILE"* ]]; then
if [ ${FOLDER_PATH:0-1} == "/" ]; then
echo -e "\n FROM upload_in_drive $FILE_TO_UPLOAD for the COMPANY $COMPANY \n"
UPLOAD_OUTPUT=`$GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION upload --no-progress -p $TODAY_FOLDER_ID ${FOLDER_PATH}$FILE_TO_UPLOAD`
echo $UPLOAD_OUTPUT
/usr/bin/python3.7 /_script/py-uploader/main.py -p "$FOLDER_PATH$FILE_TO_UPLOAD" -n "$COMPANY"
else
echo -e "\n FROM upload_in_drive $FILE_TO_UPLOAD for the COMPANY $COMPANY \n"
UPLOAD_OUTPUT=`$GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION upload --no-progress -p $TODAY_FOLDER_ID ${FOLDER_PATH}/$FILE_TO_UPLOAD`
echo $UPLOAD_OUTPUT
/usr/bin/python3.7 /_script/py-uploader/main.py -p "$FOLDER_PATH/$FILE_TO_UPLOAD" -n "$COMPANY"
fi
fi
else
echo -e "\n File already uploaded \n"
fi
done
done
DISK_USAGE=`df -h --total | grep ^total`
DRIVE_USAGE_TOTAL=`$GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION about | grep ^Total`
DRIVE_USAGE_USED=`$GDRIVE_LOCATION --config $GDRIVE_CONFIG_LOCATION about | grep ^Used`
echo ""
echo ""
echo -e "\n File caricati con successo nella cartella $TODAY_DATE in $GDRIVE_FOLDER \n"
echo -e "\n Disk Usage: $DISK_USAGE \n"
echo -e "\n Drive Usage: $DRIVE_USAGE_USED on $DRIVE_USAGE_TOTAL \n"
echo -e "\n File caricati con successo nella cartella $TODAY_DATE in $GDRIVE_FOLDER. Disk Usage: $DISK_USAGE Drive Usage: $DRIVE_USAGE_USED on $DRIVE_USAGE_TOTAL \n" > $PATH_INFO_DRIVE
}
function get_recent_files_from_folder(){
# $1 = the folder from which get the files
FOLDERS=($@) # $@ means get all passed parameters
echo -e "\n Start getting files... \n"
RANDOM=$$
for FOLDER in "${FOLDERS[@]}"; do
for FILE in `ls $FOLDER`; do
# To have unique values I have to include time
SPLITTED_FILE_DATETIME=($( echo $FILE | tr "_" "\n"))
SPLITTED_FILES["${SPLITTED_FILE_DATETIME[0]}_$RANDOM"]=$FILE
done
done
echo -e "\n End getting files... \n"
TODAY_Ymd=$(date +"%Y%m%d")
for KEY in "${!SPLITTED_FILES[@]}"; do
SPLITTED_DATE=($( echo $KEY | tr "-" "\n" ))
if [[ $TODAY_Ymd == "${SPLITTED_DATE[0]}" ]]; then
MOST_RECENT_FILES+=("${SPLITTED_FILES[$KEY]}")
fi
done
echo "${MOST_RECENT_FILES[@]}"
the_uploader_to_parent
}
// Starting point of the bash script
get_recent_files_from_folder "${SAVED_PATH[@]}"
脚本在 2-3 天前工作正常,但现在的问题是
the outer loop
似乎没有遍历脚本中的第一个键 /_backup/mysql/,下面的路径打印 2 键,但只有 /_backup/images/ 继续逻辑,显然是错误的,因为 /_backup/images/: 中没有 .sql.zip 文件
the outer loop
中的行:echo "FOLDER PATH: $FOLDER_PATH"
FOLDER PATH: /_backup/mysql/
脚本似乎跳到了2键FOLDER PATH: /_backup/images/
剧本继续
ls -l /_script/uploader/upload_in_drive 输出
-rwxr-xr-x. 1 root root 16587 15 mar 09.16 /_script/uploader/upload_in_drive
我不知道为什么直到 2-3 天前它工作正常,现在不再工作了。