Auf einem Samba-Laufwerk, welches auf einem Linux-Rechner liegt und für die Windows-Computer freigegeben wurde, liegen sehr viele Dateien vor. Statt aus dem Windows Explorer heraus zu suchen (was aufgrund des Netzwerks und des Samba-Dienstes selbst ziemlich langsam ist), wird durch das Erstellen eines Ordners eine Suche definiert.
Hierzu wird ein neuer Ordner „_search“ verwendet. Alle unter diesem Ordner erstellten Unterordner lassen das Linux-System automatisch lokal eine Suche nach dem Namen des Ordners ausführen. Die gefundenen Dateien werden per Softlink im Verzeichnis bereitgestellt. Für Windows erscheint es dann so, als ob die Dateien direkt unterhalb des Unterordners liegen.
Am besten in /etc/rc.local das Skript aufrufen, oder direkt einen neuen Dienst erstellen.
inotify.sh
#!/bin/bash # This example uses ".jpg" files SEARCHPATH="/var/smb/" mkdir -p ${SEARCHPATH}/_search inotifywait -mq -e moved_to -e create --format %f ${SEARCHPATH}/_search | while read FILE do # Nur auf Verzeichnisse reagieren, nicht auf Dateien if [ -d "${SEARCHPATH}/_search/${FILE}" ] then if [ `expr "${FILE}" : ".*Neuer Ordner"` -ne 0 ] # Auch Abwandlungen hiervon then continue fi rm -f "${SEARCHPATH}/_search/${FILE}/"* # Falls umbenannt wurde rm -f "${SEARCHPATH}/_search/${FILE}/.ready" SEARCH=`echo "${FILE}" | sed s/\ /*/g` find ${SEARCHPATH}/ -wholename '${SEARCHPATH}/_search' -prune -o -type f -iname "*${SEARCH}*.jpg" -printf "ln --backup=t --suffix=\".bak\" -s \"%p\" \"${SEARCHPATH}/_search/${FILE}/\"\n" | sh cd "${SEARCHPATH}/_search/${FILE}" # Duplicates have wrong extensions. TODO: Do this for any filename? for bkp in "${SEARCHPATH}/_search/${FILE}/"*.~*; do mv "${bkp}" "${bkp/%\~/.jpg}"; done >;/dev/null 2>&1 # Mark for Windows user when we've finished. (Only necessary if local system is really slow or data is huge) touch "${SEARCHPATH}/_search/${FILE}/.ready" fi done