如何获取当前目录中的每个文件夹并将其迭代到脚本中

时间:2013-12-17 20:30:19

标签: bash shell

我正在制作一个备份脚本来压缩文件并将它们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
~

3 个答案:

答案 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