Ist es möglich, eine Datei automatisch umzubenennen, wenn sie in einem bestimmten Verzeichnis abgelegt wird?
Zum Beispiel habe ich ein Verzeichnis mit dem Namen "dir0". Ich verschiebe oder kopiere eine Datei mit dem Namen "file1" in "dir0". Dann sollte "file1" in "file1_ {current timestamp}" umbenannt werden.
linux
filesystems
Nick.h
quelle
quelle
Antworten:
Normalerweise tun Sie dies programmgesteuert zum Zeitpunkt des Erstellens oder Verschiebens der Datei. Es ist jedoch möglich, ein Skript auszulösen, wenn eine Datei erstellt oder in einen Ordner verschoben wird
incron
. Richten Sie Ihre Tab-Dateiincrontab -e
mit einer Zeile wie dieser ein, aber natürlich mit Ihren Pfaden:Dann
/path/to/script
schreibe eine schnelle Umbenennungsaktion. Beachten Sie, dass das Skript auch für die neue Datei aufgerufen wird, die Sie erstellen. Daher muss geprüft werden, ob die Datei bereits einen geeigneten Namen hat oder nicht. In diesem Beispiel wird geprüft, ob die Datei als letzten Teil des Dateinamens eine zehnstellige Zahl für Sekunden ab der Epoche enthält. Wenn dies nicht der Fall ist, wird sie hinzugefügt:Bearbeiten: Als ich das erste Mal schrieb, hatte ich zu wenig Zeit und konnte nicht herausfinden, wie
bash
der Pattern-Matching hier durchgeführt werden soll. Gilles wies darauf hin, wie dies ohne Aufruf von grep mit ERE-Matching in bash geschehen kann:quelle
Ich denke, das
inotify
ist ein Werkzeug, das in diesem Fall verwendet werden kann. In Debian gibt es ein Toolinoticoming
zum Ausführen von Aktionen bei der Dateierstellung:{}
wird durch den Dateinamen ersetzt.Der von mir angegebene Befehl ist nicht vollständig - es wird eine Schleife ausgelöst, da die Datei beim Umbenennen als neu erkannt wird
mv
und somit WIEDER bearbeitet wird und so weiter. Um dies zu vermeiden, können Sie die--suffix
Option verwenden, wenn Sie wissen, welches Suffix vor dem Umbenennen in der Datei enthalten sein wird.quelle
inoticoming
. Wann ist es aus Neugier besser, dies zu wiederholeninocron
?inoticoming
die "ähnlichincrond
, aber leichter und nicht als Standard-Daemon gestartet" ist. Ich denke also, es ist nur eine andere Lösung mit etwas anderem Ansatz. .. ich denke , dassincron
mehr populär ist - ich wenig Schwierigkeiten haben , findeninoticoming
Startseite ein Paket für sie außerhalb Debian ...inoticoming
nur in Debian-basierten Distributionen gefunden (in meinem Gentoo gibt es kein Ebuild dafür). Auf der Seite, die ich gepostet habe, gibt es zwei Pakete:reprepro
und darunterinoticoming
...Sie könnten einfach ein Skript wie dieses nehmen und ausführen lassen ... Ich überlasse es dem Leser als Übung, die zusätzlichen Bits hinzuzufügen, damit es als Dienst gestartet wird und nicht mehrere Kopien gleichzeitig ausgeführt werden.
Und hier ist es funktioniert:
quelle
perl
kann alles getan werden, aber ein persistentes Skript, das in einer X-Sekunden-Schleife ausgeführt wird, ist definitiv ein Hack, wenn Sie Ereignisbenachrichtigungen über das Schreiben von Dateien erhalten und sofort reagieren können, ohne den Rest der Zeit Ressourcen zu verschwenden.