我需要将文件从一个文件夹复制到另一个文件夹。在第一个文件夹中我有文件...当我开始从一个文件夹复制到另一个文件夹时,我仍然没有所有文件......它们即将来临...所以我需要复制文件测试,如果它们是在第一个文件夹中...如果它们存在,则复制到另一个文件夹,如果没有,请尝试直到文件到达。我准备了以下代码,但这还不够。我需要帮助。
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
现在这段代码将文件复制到另一个文件夹,当一个文件没有时,程序会在几秒钟后再次搜索文件......但是当文件到达时...程序没有检测到它。循环中的东西可能不好......请帮忙......
答案 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