Bash-Script mit Samba und Regex

Aus MyWiki
Version vom 6. August 2020, 16:13 Uhr von Rueling (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „Hier ein Script, dass per smbclient das Erstell-Datum von der ersten Datei/Verzeichnis von einem Share abfragt.<br> Es wird von einem Share Ordner (also Ordner…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Hier ein Script, dass per smbclient das Erstell-Datum von der ersten Datei/Verzeichnis von einem Share abfragt.
Es wird von einem Share Ordner (also Ordner unterhalb vom Share) der erste Eintrag (Datei oder Verzeichnis) geholt.
Dann wird per Regex mit 'sed' alles außer dem Namen enfernt.
sed ohne Parameter '-r' muss vor einem "+" ein "\" Schreiben um das zu escapen
bei '-r' ist das wohl nicht notwendig. Das -r (bei einigen Version auf -e) benötigt man um eine Zeichenkette innerhalb des Strings einzusetzen

#!/bin/bash
#
# Parameter
HOSTNAME=$1
SHARE=$2
SHAREDIR=$3
DOMAIN=$4

# Settings
RET=0
STRING="reading from share $SHARE on $HOSTNAME with sharedir $SHAREDIR ok"
FAILSTRING="Error reading from share $SHARE on $HOSTNAME with sharedir $SHAREDIR"
SMBCLIENT="/usr/bin/smbclient -A /etc/icinga2/auth.cfg -mSMB3 "
date1=$(date +"%s%2N")  

# Lies den ersten Eintrag im ShareDir (Verzeichnis oder Datei) und ermittle dessen create_time
# dazu muss die Zeile mit dem Eintrag so ersetzt werden, dass nur der Dateiname uebrig bleibt
#FIRST_ENTRY=$($SMBCLIENT "//$HOSTNAME/$SHARE"  -c "ls $SHAREDIR/*" | head -n 3 | tail -n 1
#echo $FIRST_ENTRY |sed 's/\s\+[N|D|DH]\s[0-9]\+.\+//g' >> /tmp/smb.log 

FIRST_ENTRY=$($SMBCLIENT "//$HOSTNAME/$SHARE"  -c "ls $SHAREDIR/*" | head -n 3 | tail -n 1 | sed -r 's/\s+(.+)\s+[N|D|DH]\s+[0-9]+.+/\1/g')
ALL_INFO=$($SMBCLIENT "//$HOSTNAME/$SHARE" -c "allinfo $SHAREDIR/$FIRST_ENTRY" | head -n 2 | tail -n 1 )
#echo $FIRST_ENTRY >> /tmp/smb.log

#FIRST_ENTRY=$($SMBCLIENT "//$HOSTNAME/$SHARE"  -c "ls $SHAREDIR/*" | head -n 3 | tail -n 1
#echo $FIRST_ENTRY |sed 's/\s\+[N|D|DH]\s[0-9]\+.\+//g' >> /tmp/smb.log
#echo $ALL_INFO >> /tmp/smb.log
#echo $'\n' >> /tmp/smb.log
date2=$(date +"%s%2N")
diff=$(($date2-$date1))
#
# Pruefe auf "create_time"
#
if $ALL_INFO = create_time* ; then
    RET=0;
else
    RET=2;
    STRING="$FAILSTRING\n$ALL_INFO";
fi

#
# Returnwert und Text ausgeben
#
echo "$STRING\n$ALL_INFO | time="$diff"ms"
exit $RET