複製一個目錄,這個目錄如果有很多子項,可能會耗費大量的時間,並且不可控(你不知道複製了哪些,還剩哪些)。以下的腳本解決這個問題,每複製一個文件或者文件夾,就記錄下來,這樣如果一次沒有複製完,還可以重啓腳本繼續複製。
SRC=/data/temp/src
DEST=/data/tmp/dest
LOGFILE=/data/script/cplog.log
EXISTS=`cat $LOGFILE`
function cpfileordir(){
tmpdir=$1
if [[ "$EXISTS" =~ "$tmpdir" ]]
then echo "copied:$tmpdir"
else
echo ">>>>>b $tmpdir<<<<<"
cp -r $SRC/$tmpdir $DEST/
echo $tmpdir >> $LOGFILE
echo "<<<<<e $tmpdir>>>>>"
fi
}
cd $SRC
for tmpdir in `ls`
do
cpfileordir $tmpdir
done
關於複製文件,當前能想到的有四種方法。
1.cp -r
建議不要一次性複製一個巨量的目錄,將目錄拆分,以上的複製腳本就是一個探索,可以做到進度可控。
2.tar+nc
首先監聽:nc -l 8888 |tar -C /data/temp/dest -zxf -
另起窗口:cd /data/temp/src/ && tar -zcf - image | nc 127.0.0.1 8888
不先cd,造成複製過去就整個文件目錄結構了,ip改爲指定的IP可以實現遠程傳輸。
3.tar壓縮解壓
cd /data/temp/src/ && tar -zcf /data/temp/dest/image.tar.gz image
cd /data/temp/dest && tar -zxf image.tar.gz
4.rsync可以實現遠程傳輸