更改shell脚本以查看动态目录列表

时间:2016-02-13 23:40:48

标签: linux bash shell loops

我目前有一个脚本(连接到GUI),它转到指定的文件夹,获取文件,放在别处。工作得很好。

# set up log in info.
HOST=$1
USER=$2
PASS=$3

#local file info
FROMDIR=$4
FROMFILE=$5

#remote file info
TODIR=$6
TOFILE=$7

#sent dir
SENTDIR=$FROMDIR/../sent

#log dir
DIRNAME=`/usr/bin/dirname $0`
LOGDIR=$DIRNAME/../log
LOGFILE=$LOGDIR/$5.log


#####################################################
#
# move the file to the pickup folder 
#
#####################################################

if ! test -d $LOGDIR
then
    /usr/bin/mkdir $LOGDIR
fi



if  `/usr/bin/cp "$FROMDIR/$FROMFILE" "$TODIR/$TOFILE"`
then
    echo `date` >> $LOGFILE
    echo "Successfully copied file from $FROMDIR/$FROMFILE to $TODIR/$TOFILE" >> $LOGFILE
    exit 10;
else
    echo `date` >> $LOGFILE.failed
    echo "Colud not copy file from $FROMDIR/$FROMFILE to $TODIR/$TOFILE" >> $LOGFILE.failed
    exit 1;
fi   

但是,我现在想要更改它以浏览子目录列表并将文件放到一个位置。

注意: 对于以下内容,请将其用作参考:

/foo/sing/song
         /tommy
               /chicken
                     /in
                     /out
               /burger
                     /in
                     /out
               etc...

/ tommy下的子目录将不断增长。我需要进入每个文件夹" / in"并将文件带到/ foo / sing / song(我的脚本应该可以正常工作)。

我感谢您提供的任何帮助;我是shell脚本的新手,所以这个字段中的通配符和循环仍然比我高一点。

谢谢!

1 个答案:

答案 0 :(得分:1)

你可以用一行代码来做到这一点:

cp -r /foo/sing/song/tommy/*/in/* /foo/sing/song

*之类的通配符非常易于理解:它意味着任何-r是可选的,如果您的in文件夹中只有其他目录,则需要{。}}。