source="/media"
target="/tmp"
depth=20
cd "${source}"
maxthreads=5
sleeptime=5
find . -maxdepth ${depth} -type d | while read dir
do
if [ `echo "${dir}" | awk -F'/' '{print NF}'` -gt ${depth} ]
then
subfolder=$(echo "${dir}" | sed 's@^\./@@g')
if [ ! -d "${target}/${subfolder}" ]
then
mkdir -p "${target}/${subfolder}"
chown --reference="${source}/${subfolder}" "${target}/${subfolder}"
chmod --reference="${source}/${subfolder}" "${target}/${subfolder}"
fi
while [ `ps -ef | grep -c [r]sync` -gt ${maxthreads} ]
do
echo "Sleeping ${sleeptime} seconds"
sleep ${sleeptime}
done
nohup rsync -au "${source}/${subfolder}/" "${target}/${subfolder}/"
</dev/null >/dev/null 2>&1 &
fi
done
find . -maxdepth ${depth} -type f -print0 | rsync -au --files-from=- --from0 ./ "${target}/"
答案 0 :(得分:1)
感谢您的帮助。通过将-v开关添加到rsync,我解决了这个问题。
答案 1 :(得分:0)
不确定这是不是你所追求的(我不知道rsync是什么),但你不能只是运行脚本,
./myscript > logfile.log
或
./myscript | tee logfile.log
(即:如果你想看到输出的话,管道到三通)?
或者......不确定这是真正的编码器所做的,但你可以将脚本中每个命令的输出附加到日志文件中,例如:
#at the beginning define the logfile name:
logname="logfile"
#remove the file if it exists
if [ -a ${logfile}.log ]; then rm -i ${logfile}.log; fi
#for each command that you want to capture the output of, use >> $logfile
#eg:
mkdir -p "${target}/${subfolder}" >> ${logfile}.log
如果rsync有几个带有名称的线程,我想你可以将它们作为>> ${logfile}${thread}.log
存储到单独的日志文件中,并将最后的文件连接成1个日志文件。
希望有帮助吗? (我很想回答 - 所以如果我发布的内容基本/不好,或者您已经考虑过这些想法,我会道歉!)