Hallo Vinzenz, hallo Dennis,
also vielen Dank euch beiden. Ich hab mich jetzt tatsächlich für die Lösung mit inotify entschieden. Dies aus zwei Gründen:
Erstens will mir das Prinzip eher einleuchten, nur auf ein Event hin auch eine Aktion vorzunehmen. Zweitens kann ich so ganz gezielt nur die hinzugekommene Datei behandeln.
Das Shell-Skript sieht nun so aus:
#!/bin/bash
OBSERVED_DIR=/var/egroupware/default/files/mydms
DELAY=2s
# Wait for created files and folders in $OBSERVED_DIR
while message=`inotifywait -r -e CREATE $OBSERVED_DIR`;
do
# A file was created
if [ -z `echo $message | grep ISDIR | sed 's/ //g'` ]
then
# Removing the CREATE -Message gives the /path/to/file
f=`echo $message | sed 's/ CREATE //'`;
# Make the hard-link
ln $f ${f%.*};
# A folder was created
else
# wait $DELAY just to make sure the file is created;
# assume that if the file is not created yet, inotifywait is listening
# again for its creation
sleep $DELAY;
# Removing the CREATE,ISDIR -Message gives the /path/to/folder
dir=`echo $message | sed 's/ CREATE,ISDIR //'`;
# find all data.* files in the new Folder
for f in $(find $dir -regex ".*data\..*$");
do
# Make the hard-link
ln $f ${f%.*} ;
done
fi
done
Gestartet wird das Skript durch sudo su www-data -c <skript.sh>. Am besten als Runlevel-Prozess. Vielleicht hilft es in der Zukunft auch anderen mit ähnlichem Problem.
Ich bin zwar noch nicht ganz zufrieden damit, da genau für mein Problem ein bekanntes Problem bei inotifywait -r greift, nämlich dass Order und Inhalt so kurz hintereinander erstellt werden, dass das Erzeugen des Inhaltes u.U. nicht verfolgt wird, aber das hab ich ja nun durch den else-Abschnitt behoben.
Nochmal vielen Dank, wieder recht viel über Linux in den letzten 24 Stunden gelernt.
Beste Grüße
Biesterfeld
Art.1: Et es wie et es
Art.2: Et kütt wie et kütt
Art.3: Et hätt noch immer jot jejange
Das Kölsche Grundgesetz