umbenennen oder auf close_write weitergehen?

379
Terry

Ich habe mich verrückt gemacht und versucht, das herauszufinden.

inotifywait -m -r -e close_write --format '%?' folder 

Wie kann ich die bestimmte Datei, die dieses Ereignis auslöst, umbenennen und dann verschieben oder verschieben und umbenennen? Mit der Umbenennung meine ich, die Leerzeichen durch nicht-alphanumerische Zeichen wie Unterstriche, Bindestriche usw. zu ersetzen. Eine akzeptable Alternative wäre, den Dateinamen entweder mit einem eindeutigen Bezeichner zu versehen, der für meinen Zweck eindeutig ist Ordner nach der Bearbeitung. Filme landen im Filmordner usw.

Ich habe den gesamten Verarbeitungsaspekt, aber es fehlt mir die Fähigkeit, mein Ziel zu erreichen.

Es muss nicht so sein inotifywait, ich bin offen für alles (außer Windows), das ich mit Shell-Scripting erreichen kann.

Kann es nach einer Datei suchen, die vor n Sekunden zuletzt geändert wurde? Wenn ja, überprüfen Sie die gleiche Datei nach 30 Sekunden, um sicherzustellen, dass sie sich nicht geändert hat, und handeln Sie danach. Ich brauche eine Möglichkeit, fertige Dateien von Dateien zu trennen, die noch nicht vollständig heruntergeladen wurden.

Ich wäre für jede Hilfe dankbar.

0

2 Antworten auf die Frage

0
Terry

Nun, da das Zeitproblem nicht kritisch war, habe ich das Ganze als Cron-Job eingerichtet und nach Dateien gesucht, die MEHR als eine Minute zuvor geändert wurden mmin +1, stundenweise, und als ich zurücksuchte, waren meine Dateien nicht verschoben worden und mein Terminal war nicht da hatte eine Meldung "Keine solche Datei oder ein solches Verzeichnis". Ich denke renamenicht wiederkehren.

Ein paar Stunden Googeln brachte mich zu dieser Seite: Suchen Sie die Datei und dann die CD in dieses Verzeichnis in Linux .

Jetzt ab in meinem neuen Videoordner

cd -- "$(find ./ -name "*S0*" -type f -printf '%h' -quit)" find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \; mv -t /home/terry/Video_Processing/staging "*%*" 

Beim Einrichten in cron werden alle fertiggestellten Dateien in den Bereitstellungsbereich verschoben, wobei die Datei für den nächsten Durchlauf noch heruntergeladen wird.

0
Terry

Nach einer dringend benötigten Pause entschied ich mich, noch einmal an meinem ursprünglichen Plan inotifywaitzu arbeiten, um den Umbenennungs- / Verschiebungs- / Umwandlungsprozess auszulösen. Es war schmerzlich offensichtlich, dass die Datei MEHR als 60 Sekunden zuvor erstellt worden sein musste mmin, um die Datei (en) abzufangen, also zuerst den Auslöser, gefolgt von einem 61 Sekunden langen Ruhezustand, bevor die Umbenennung eingeleitet wurde.

Ich verwende, iwatchda es Rekursivität ermöglicht. Solange die Dateien auf die gleiche Weise benannt werden titleS0xExx.ext, wobei die Ziffern 0-9 die x-Werte ersetzen, scheint es gut zu funktionieren. Hier ist der relevante Teil des einzigen Teils, in dem eine Rekursion erforderlich ist.

watch=/home/terry/New_Video/TV_Show events=close_write,move_to excluded= recursive=false autoadd=false command=cd /home/terry/New_Video/TV_Shows command=sleep 61 command=cd -- "$(find ./ -name "S0" -type f -printf '%h' -quit)" command=find ./ -type f -mmin +1 -exec rename 's/\ /\%/g' {} \; command=mv -t /home/terry/Video_Processing/staging *%* command=find /home/terry/New_Video/TV_Shows -empty -type d -delete 

Die Filme und andere Ordner benötigen ebenfalls den 61 Sekunden langen Schlaf.

Die Zeitverzögerung ist in diesem Fall kein Problem. Es ist keine perfekte Lösung, aber es ist ungefähr so ​​nahe, wie "verdammt" das Fluchen ist.

Aus irgendeinem Grund wurde der leere Ordner nicht entfernt, so dass möglicherweise einige Anpassungen erforderlich sind.

Diese Befehle sollen eine separate Zeile sein, ich muss das Zitat nachlesen. Terry vor 6 Jahren 0