我正在制作一个备份脚本来压缩文件并将它们ftp到Windows服务器。我现在的工作原理,但是当我执行它时,它需要为我想要单独备份的每个文件夹设置一个参数。 / path /可能包含我要备份的许多文件夹,我想自动执行此脚本以获取/ path /中的每个文件夹,并通过运行脚本一次将它们备份到自己的.zip中。谁能提供任何有关如何做到这一点的见解?或者至少我如何获得每个目录并进行迭代?
#!/bin/sh
HOST='x.x.x.x'
USER='user'
PASSWD='pass'
now=$(date +"%m_%d_%Y")
cd /path/
PROC=$1
DIR="$PROC"
FILE="$PROC"."$now.zip"
echo $FILE
zip -r $FILE $DIR
ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
binary
mkdir $PROC
cd $PROC
put $FILE
quit
END_SCRIPT
#exit 0
~
答案 0 :(得分:8)
cd /path
for dir in */; do echo "$dir"; done
尾部斜杠将通配符结果限制为当前目录中的目录。
答案 1 :(得分:1)
这应该让你开始......
find /path -type d -depth 1 | while read DIR ; do
BARE_DIR=$(basename $DIR)
FILE="${BARE_DIR}.${now}.zip"
zip -r $FILE $DIR
ftp -n $HOST <<' END_SCRIPT'
quote USER $USER
quote PASS $PASSWD
binary
mkdir $BARE_DIR
cd $BARE_DIR
put $FILE
quit
END_SCRIPT
done
将/path
替换为您的起点。
已更新,以根据评论限制目录深度
答案 2 :(得分:-2)
您可以使用glob模式/path/*
获取/ path /目录中的文件列表,并在for
循环中迭代它们:
for f in /path/*
do
DIR="$f"
FILE="$f.$now.zip"
zip -r $FILE $DIR
...
done