Bash-Script mit Samba und Regex
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