script soll nur "unbenutzte" dateien verarbeiten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
dmant
Beiträge: 251
Registriert: 09.10.2017 10:28:29

script soll nur "unbenutzte" dateien verarbeiten

Beitrag von dmant » 23.01.2018 17:41:49

Hallo,

ich habe mir ein kleines Scrpt gebastelt was mit Videodateien automatisch be-/ verarbeitet und diese dann auf meinen NAS schiebt. Jetzt komme ich allerdings an zwei Punkten nicht weiter.

Wie kriege ich am ende des Scripts das ".new" aus dem Dateinamen wieder raus?

Dann soll das Script die ganze Zeit in einer Schleife laufen, sobald neue Dateien in den Ordner make kommen soll sich das Script die Datei krallen und loslegen. Wie kann ich aber nun unterscheiden ob eine Datei noch "benutzt" wird oder aber eben nicht? Also wenn ich jetzt die Datei über NFS/Samba auf meinen Server schiebe, dann dauert dieser je nach Dateigröße einige Zeit. Wie kann ich nun feststellen ob die Datei gerade noch "ankommt" oder schon "angekommen" ist?

Also halt etwas wie "wird Datei noch kopiert/verschoben, lasse Datei in ruhe" ?

Hier mal das Script.

https://nopaste.linux-dev.org/?1172656

Danke

DeletedUserReAsG

Re: script soll nur "unbenutzte" dateien verarbeiten

Beitrag von DeletedUserReAsG » 23.01.2018 17:46:54

dmant hat geschrieben: ↑ zum Beitrag ↑
23.01.2018 17:41:49
Wie kriege ich am ende des Scripts das ".new" aus dem Dateinamen wieder raus?
Sowas geht recht gut mit basename (in Verbindung mit mv). Alternativ könnte man auch mit awk o.ä. was basteln.
dmant hat geschrieben: ↑ zum Beitrag ↑
23.01.2018 17:41:49
Wie kann ich aber nun unterscheiden ob eine Datei noch "benutzt" wird oder aber eben nicht?
Um zu schauen, ob eine Datei geöffnet ist, bietet sich lsof oder auch fuser an.

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script soll nur "unbenutzte" dateien verarbeiten

Beitrag von Meillo » 23.01.2018 20:35:17

dmant hat geschrieben: ↑ zum Beitrag ↑
23.01.2018 17:41:49
Wie kriege ich am ende des Scripts das ".new" aus dem Dateinamen wieder raus?
So:

Code: Alles auswählen

$ a=foo.new
$ echo ${a%.new}
foo
(Und das ist sogar sehr portabel.)
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8782
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: script soll nur "unbenutzte" dateien verarbeiten

Beitrag von Meillo » 23.01.2018 20:44:26

dmant hat geschrieben: ↑ zum Beitrag ↑
23.01.2018 17:41:49
Dann soll das Script die ganze Zeit in einer Schleife laufen, sobald neue Dateien in den Ordner make kommen soll sich das Script die Datei krallen und loslegen. Wie kann ich aber nun unterscheiden ob eine Datei noch "benutzt" wird oder aber eben nicht? Also wenn ich jetzt die Datei über NFS/Samba auf meinen Server schiebe, dann dauert dieser je nach Dateigröße einige Zeit. Wie kann ich nun feststellen ob die Datei gerade noch "ankommt" oder schon "angekommen" ist?

Also halt etwas wie "wird Datei noch kopiert/verschoben, lasse Datei in ruhe" ?
Ich wuerde dazu Ordner fuer die einzelnen Stati einfuehren, z.B.:

- incoming
- 2convert
- converting
- 2transfer
- transferring

Jeder Verarbeitungschritt (Convert und Transfer) schaut im vorigen Ordnern ob was da ist, verschiebt es dann zu Beginn in seiner Taetigkeit in seinen eigenen Processing-Ordner, und wenn er fertig ist in den Nachfolgeordner. mv(1)s sind atomar, damit ist sichergestellt, dass eine Datei immer nur in genau einem Status ist. In so einem System wuerde ich Convert und Transfer aber trennen und separat laufen lassen.

Ich denke, das ist robust und klar ... und auch nicht viel aufwaendiger.
Use ed once in a while!

Antworten