【问题标题】:performing multiple backups at the same time with a bash script使用 bash 脚本同时执行多个备份
【发布时间】:2026-01-08 20:30:01
【问题描述】:

创建一个脚本来备份文件或目录树,方法是制作文件的 zip 并将其复制 $HOME/Backups。 zipfile 名称应包括它正在备份的内容以及文件的创建日期。该脚本应采用随机数量的参数来指定要备份的内容。如果没有给它至少一项包含在备份中,它应该抱怨。我已经完成了大部分工作,但我遇到了多个文件的问题,即要同时备份的文件 1 文件 2

#!/bin/bash
clear
echo
echo "Use this script to backup files to your home/backups directory"
echo
ls -la
echo
echo "================================================================"
echo
echo -n "Input file(s)/dir to backup: " ; read filez

while [ "$filez" == "" ] ; do
    echo -n "You didnt input a filename, try again: " ; read filez
done

while [ ! -e  "$filez" ] ; do
    echo -n "No such file/dir, try again: " ; read filez
    while [ "$filez" == "" ] ; do
        echo -n "You didnt input a filename, try again: " ; read filez
    done
done


echo
echo "================================================================"
echo
echo -n "Input name of backup file you wish to create(date automatically included): " ; read filezname
while [ "$filezname" == "" ] ; do
    echo -n "You didnt input a filename, try again: " ; read filezname
done

zip -r $HOME/backups/$filezname"_$(date +%F)" $filez

【问题讨论】:

标签: bash


【解决方案1】:

就我个人而言,我是bash 直接从命令行获取参数的脚本的粉丝:

script arg1 arg2 arg3 ...

Bash 使用特殊数组$@ 获取参数,您可以使用shift 进行参数处理。像这样的:

#!/bin/bash

filezname=$1
shift

filez=""
for file in "$@"
do
    filez="$filez $file"
done

if [[ $filez == "" ]]
then
    echo "Give me argz! Nom nom nom!"
    exit 0
fi

# Do stuff

它的作用是接受第一个参数,将其作为 zip 文件的名称,然后将您要压缩的其余文件名压缩成一个大的、以空格分隔的字符串,您可以使用它。

【讨论】:

  • 您无法在单个字符串 $filez 中稳健地构建参数列表 - 请改用数组(或直接使用 "$@")。
最近更新 更多