控制两个目录之间的复制文件

时间:2016-06-15 20:12:12

标签: bash

我需要将文件从一个文件夹复制到另一个文件夹。在第一个文件夹中我有文件...当我开始从一个文件夹复制到另一个文件夹时,我仍然没有所有文件......它们即将来临...所以我需要复制文件测试,如果它们是在第一个文件夹中...如果它们存在,则复制到另一个文件夹,如果没有,请尝试直到文件到达。我准备了以下代码,但这还不够。我需要帮助。

codi=( 000 003 006 009 012 015 018 021 024 027 030 033 036 039 042 045 048 051 054 057 060 )
for c in ${codi[@]};do

FILE=$dir1/gfs.t00z.pgrb2.0p50.f$c
if [ -f "$FILE" ]; then
echo "File $FILE exists"
cp  $dir1/gfs.t00z.pgrb2.0p50.f$c $dir2
else
echo "File $FILE does not exist"
cont=100
until [ $cont -lt 1 ];do
if [ -f "$FILE" ];then
cp  $dir1/gfs.t00z.pgrb2.0p50.f$c   $dir2
else
echo "still File $FILE does not exist" $FILE
fi
let cont-=1
echo "$cont"
sleep 3
done
sleep 10
fi
done

现在这段代码将文件复制到另一个文件夹,当一个文件没有时,程序会在几秒钟后再次搜索文件......但是当文件到达时...程序没​​有检测到它。循环中的东西可能不好......请帮忙......

1 个答案:

答案 0 :(得分:1)

我喜欢shell脚本,但最好通过rsync

实现此用例

有关详细信息,请参阅rsync manual

Local:  rsync [OPTION...] SRC... [DEST]
Access via remote shell:
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
  Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

有一个例子here

您也可以使用inotify-tools包中的inotifywait。

inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
    echo need to rsync $MODFILE ...
done