История изменений
Исправление vodz, (текущая версия) :
Ну если по простому то как-то так:
#!/bin/bash
LEVEL=5
STARTDIR=/DUMPPLACE
OUTDIR=/restore
find_out=/tmp/find_out$$.txt
find "$STARTDIR" > $find_out
del=
for ((i=0; i<LEVEL; i++)); do
del="$del*/"
done
while read f; do
p=${f#$del}
[[ $p = $f ]] && continue
if [[ $f -nt $OUTDIR/$p ]]; then
if [[ -d $f ]]; then
echo mkdir -p "$OUTDIR/$p"
else
echo copy "$f" "$OUTDIR/$p"
fi
else
echo skip "$p"
fi
done < $find_out
rm $find_out
Где первые переменные надо сделать под вас. LEVEL - это количество '/' в полном пути из $DUMPPLACE/$NOWYEAR/$NOWMONTH/$NOWDAY/, то есть в том числе и в $DUMPPLACE. echo сами после теста первые два удалите.
Исправление vodz, :
Ну если по простому то как-то так:
#!/bin/bash
LEVEL=5
STARTDIR=/DUMPPLACE
OUTDIR=/restore
find_out=/tmp/find_out$$.txt
find "$STARTDIR" > $find_out
del=
for ((i=0; i<LEVEL; i++)); do
del="$del*/"
done
while read f; do
p=${f#$del}
[[ $p = $f ]] && continue
if [[ $f -nt $OUTDIR/$p ]]; then
if [[ -d $f ]]; then
echo mkdir -p "$OUTDIR/$p"
else
echo copy "$f" "$p"
fi
else
echo skip "$p"
fi
done < $find_out
rm $find_out
Где первые переменные надо сделать под вас. LEVEL - это количество '/' в полном пути из $DUMPPLACE/$NOWYEAR/$NOWMONTH/$NOWDAY/, то есть в том числе и в $DUMPPLACE. echo сами после теста первые два удалите.
Исходная версия vodz, :
Ну если по простому то как-то так:
#!/bin/bash
LEVEL=5
STARTDIR=/DUMPPLACE
OUTDIR=/restore
find_out=/tmp/find_out$$.txt
find "$STARTDIR" > $find_out
del=
for ((i=0; i<LEVEL; i++)); do
del="$del*/"
done
while read f; do
p=${f#$del}
[[ $p = $f ]] && continue
if [[ $f -nt $OUTDIR/$p ]]; then
if [[ -d $f ]]; then
echo mkdir -p $OUTDIR/$p
else
echo copy $f $p
fi
else
echo skip $p
fi
done < $find_out
rm $find_out
Где первый переменные надо сделать под вас. LEVEL - это количество '/' в полном пути из $DUMPPLACE/$NOWYEAR/$NOWMONTH/$NOWDAY/, то есть в том числе и в $DUMPPLACE. echo сами после теста первые два удалите.