Оболочка новичка здесь. Я не уверен, что то, что я делаю, - хороший способ сделать это.
В основном это то, что я хочу сделать:
- создать список текущих каталогов (curr.lst)
сделать различие с curr.lst и старым списком (before.lst)
если нет никакой разницы, тогда без изменений, замените curr.lst на before.lst для следующего запуска
- если там diff.lst больше 0 байтов (то есть изменение есть, сделать что-то, отправить список изменений по почте и т. Д.)
В любом случае,
Моя логика не совсем верна. Это может быть мое использование if statments.
Мне нужна помощь, чтобы настроить свою логику, улучшить практику кодирования для выполнения этой простой задачи. На самом деле все, что я хочу сделать - это запускать этот скрипт ежедневно и проверять, есть ли изменения между старым и новым, если есть изменения, я хочу знать.
Спасибо за любой вклад, предложения, примеры.
#!/usr/local/bin/bash
STAGE=/myproj/foo/proc
BASE=/dev/testing/scripts
BEFORE="$BASE/before.lst"
CURR="$BASE/curr.lst"
DIFFOUT="diff.out"
CHKSZ=`du -k "$BASE/$DIFFOUT" | cut -f 1`
#MAIN
if [ -f $BEFORE ]; then #if we find a previous file to compare enter main loop, if not get out
chmod 755 $BEFORE
echo "old list exists" 2>&1
echo "get the new list and do a diff" 2>&1
ls "$STAGE" | perl -nle 'print $1 if m|$STAGE/(\S+)|' > "$CURR" #creates a file curr.lst
#if curr.lst exists then do the diff
if [ -f $CURR ]; then
diff -b -i $BEFORE $CURR >> $BASE/$DIFFOUT 2>&1 #create file diff.out
else
echo "command did not work, no diff.out file to compare, exiting..." 2>&1
exit 0
fi
#if file diff.out exists, check its file size, if its greater than 0 bytes then not good
if [ -f $BASE/$DIFFOUT ]; then
echo "diff.out exists, how big is it?" 2>&1
chmod 755 $BASE/$DIFFOUT
$CHKSZ #run check on file size
else
echo "Could not find diff.out" 2>&1
exit 0
fi
if [ $CHKSZ == "0" ]; then
echo "no changes to report" 2>&1
rm $BASE/$DIFFOUT #Cleanup the diff since there's notthing to report
mv $CURR $BEFORE #change curr.lst to before.lst to compare next time
else
echo "Detected a change" 2>&1
echo "Report it" 2>&1
exit 0
fi
else
echo "No before file to compare" 2>&1
exit 0
fi