Fájlok mozgatása automatikusan

Egy Windows 10-es megosztott mappába érkező állományokat szeretnék villámgyorsan egy másik mappába átmozgatni. Hogyan lehet ezt a legegyszerűbben megoldani?

Hozzászólások

Nem, rohadtul nem ízlés kérdése a nyelv, ha nem natív kódot fordítasz belőle. Java?! Miért ne élből Node.js? Sőt, lehet bashból is, ahhoz nem is kell telepítgetni, elég bekapcsolni a WSL-t:

inotifywait -m /mnt/megfigyelt_könyvtár -e create -e moved_to | while read path action file; do mv "$path/$file" /mnt/célkönyvtár; done

(tudom, nem jó, ha space van a megfigyelt könyvtár útvonalában)

Egyébként: https://gallery.technet.microsoft.com/scriptcenter/Powershell-FileSyste…

Erőforrásigényről nem beszéltünk :-). Ízlés kérdése is a nyelv, manapság (Hajbazer dont like this) a legfontosabb kérdés, hogy mennyi idő alatt csinálod meg a feladatot, nem az hogy mennyi memóriát eszik. CPU-val meg Javaval is ideális-közeli lesz. A JRE-t mellétéve megáll 100MB alatt a megoldás és még telepíteni(TM) sem kell, és egész kis heap-pel is el lehet indítani, a runtime RAM foglalás is mondjuk lesz 100MB.

Valóban sokkal több, mint ami elvileg kellene neki, de adott esetben simán beleférhet.

Nem ez jött át, hanem az, hogy hűdeszagértő vok ésjólkiosztomajaváskiscsávót. Az hogy előre van telepítve, jó pont a PS-.net párosnak, de ha valaki jobban boldogul Java-ban, nem kéne leugatni, amúgy még telepíteni se kell, van nem hivatalos, de jól működő portableJRE, oda másolod, ahova akarod, ha nem csinál valami speckót, admin jog se kell neki.

Nem ugattam le, csak (igaz, kissé szarkasztikusan) megjegyeztem, hogy ágyúval verébre, és vele ellentétben én belinkeltem egy komplett forrást (amihez nem kell még portable JRE sem, csak a powershell, ami biztosan fent van a gépen).

Mellesleg rohadtul nem vagyok szakértő, mindössze beírtam a Googlenak, hogy "file watch powershell" (mert bár életemben talán ha ötször használtam powershellt valamire, és a hideg is kiráz tőle, de attól még egy egyszerű windowsos admin feladatra általában lehet megoldást találni benne), és lőn: nálam az első helyen hozta a fenti linket a Google.

(Egyébként igen, én Windowson a Powershellt dotnet alapon natívnak tekintem.)

Az inotifywait egyébként nem a Powershell része, hanem egy önálló alkalmazás, tehát a nyitóposztban írt kitétel a helyes: WSL kell neki csak. Mivel a Linux inotify API-t használja, amit a WSL megvalósít, ezért működik Windowson is. És valóban sokkal kevesebbet "fogyaszt".

A valódi programokat egyébként éppen azért szeretem jobban, mint a szkripteket, mert a szélsőséges eseteket jobban le lehet kezelni. Például a valaki által említett space van a path-on esetet ritkábban rontjuk el programban, mint szkriptben. Vagy egy másik gyakori dolog, hogy mi történik, ha egyszerre történik több minden? Programban is el lehet rontani ezeket, de legalább hibaeset alapján meg is lehet javítani, míg szkriptek esetén könnyebb zsákutcába futni. De ezek csak általános tapasztalataim, ami erre az esetre nem feltétlenül áll.

Példa: Alapértelmezetten üres a folder, és mindig teljesen kiürítjük, majd indítjuk az inotifywait-et. Mi van, ha az inotifywait indítása után, de elindulása (idő mire felkerülnek a listenerek) előtt odakerül egy file? Nem jön esemény. Szkripttel elég kellemetlen megcsinálni, bár meglehet, hogy mondjuk indítás után 1 másodperccel még egyszer ellenőrzöd egy másik "szálon", hogy került-e oda valami? Programból viszont (ha jól emlékszem) kapsz értesítést, hogy felkerültek a listenerek, akkor azonnal lefuttathatsz egy plusz csekkolást. Ezen "quirk"-ek egyébként dokumentáltak a Java-s API-n, amit linkeltem. (Régen olvastam, csak rémlik, de elég biztos vagyok benne.)

Az esetek 99.999%-ában persze ebből nem jön elő hiba, de éppen az a minőségi programok védjegye, hogy az ilyen faramuci esetekre is fel vannak készülve.

A kódsorom bash, semmi köze a powershellhez, csak demonstráltam, hogy ha extrémkedni akarok, megoldható WSL-en keresztül is.
Powershell scriptben pedig nem okoz gondot a space a fájlnévben.

Nem használok Powershellt, de .NET-et elég sokat, és a PS fswatchere a .NET-ét használja, ott pedig simán felveszem a watchert nem figyelő állapotban, hozzárendelem az eseményeket, aztán jöhet EnableRaisingEvents=true, tehát a linkelt példa is simán átalakítható, hogy a watcher ne induljon el, csak az események regisztrálása után.

Csak a history kedvéért: Már a Sun idejétől kezdve a JRE simán redistributolható a programoddal együtt, valahol le van írva, hogy szabad, akár fizetős program esetén is. Csak ki kell másolni a JRE könyvtárat, és működik akár pendrive-ról is. Még azt is megteheted, hogy néhány komponenst kihagysz (ennek mikéntje is le van írva), hogy kisebb legyen. Teljesen hivatalos.

Mi a cél? illetve define villámgyorsan
--

"After successfully ignoring Google, FAQ's, the board search and leaving a undecipherable post in the wrong sub-forum don't expect an intelligent reply."

Lehetne webes feluleten torteno feltoltes is, nem nagy dolog osszedobni erre, amikor labort tartottam anno, nekem is igy volt megoldva. (raadasul eltarolta a feltolto IP-jet, es a feltoltes idejet is, szoval ha javitott rajta, az is latszott)

Amugy a diakok - ettol meg - meg fogjak osztani egymassal, max. automatikusan nem fogjak latni a feltoltottet.

--
When you tear out a man's tongue, you are not proving him a liar, you're only telling the world that you fear what he might say. -George R.R. Martin