Permalänk
Medlem

Automatisk filorganisation

Jag har följande problem jag vill lösa. Om en specifik filtyp laddas ner vill jag att den automatiskt flyttas till ett annat ställe. I det här fallet till en katalog på nätverket som delas med Samba.

I Windows har jag löst det genom ett Chrome-tilägg, RegExp, som sparar ner filtypen till en symlink som leder till min smb-share. Linux tillåter dock inte dylika symlinkar.

Frågan är då, finns det någon "app" för det?

Permalänk
Medlem

@DasIch:

Lite av en hack lösning men:
Om du sitter på en linux installation så bör du ju bara kunna göra ett skript som läser av din nedladdnings-mapp och sedan flyttar alla filer till sina respektive destinationer. Detta skript går ju att låta köras automatiskt genom att sätta det som ett cron-job som körs varje minut, kvart, timme, etc.

Permalänk
Rekordmedlem

Det borde inte vara så svårt att göra ett bash-script som fixar det och automatisk köra skriptet via cron.

Visa signatur

R5 5600G, Asus ROG STRIX X470-F Gaming, WD SN850X 2TB, Seasonic Focus+ Gold 650W, Aerocool Graphite v3, Tittar på en Acer ET430Kbmiippx 43" 4K. Lyssnar på Behringer DCX2496, Truth B3031A, Truth B2092A. Har också oscilloskop, mätmikrofon och colorimeter.

Permalänk
Medlem

Jag är ingen fena på bash-skript men det finns en del exempel att ta hjälp av om jag googlar, så det ska väl kunna funka. Men, jag vet inte om det är en bra ide att köra som cron-job. Den skulle ju få köra med väldigt täta intervaller och oftast helt i onödan. Mycket bättre med nån sorts trigger kopplad till mappen, men hur gör man det?

Permalänk
Rekordmedlem
Skrivet av DasIch:

Jag är ingen fena på bash-skript men det finns en del exempel att ta hjälp av om jag googlar, så det ska väl kunna funka. Men, jag vet inte om det är en bra ide att köra som cron-job. Den skulle ju få köra med väldigt täta intervaller och oftast helt i onödan. Mycket bättre med nån sorts trigger kopplad till mappen, men hur gör man det?

Jag vet inte vad som tar minst resurser men skriptet blir ju så litet att det lär gå att köra det varje sekund om du vill utan att systembelastningen lär bli särskilt påverkad om det går "i tomme" och antagligen blir lasten snarlik om du gör nån loop i ett script som kollar om det finns nått i mappen.
Jag är inte heller nån bashexpert men det känns inte som om det är nått som behöver optimeras för att det stjäl systemresurser.

Visa signatur

R5 5600G, Asus ROG STRIX X470-F Gaming, WD SN850X 2TB, Seasonic Focus+ Gold 650W, Aerocool Graphite v3, Tittar på en Acer ET430Kbmiippx 43" 4K. Lyssnar på Behringer DCX2496, Truth B3031A, Truth B2092A. Har också oscilloskop, mätmikrofon och colorimeter.

Permalänk
Medlem
Skrivet av DasIch:

Jag är ingen fena på bash-skript men det finns en del exempel att ta hjälp av om jag googlar, så det ska väl kunna funka. Men, jag vet inte om det är en bra ide att köra som cron-job. Den skulle ju få köra med väldigt täta intervaller och oftast helt i onödan. Mycket bättre med nån sorts trigger kopplad till mappen, men hur gör man det?

Kolla på ”inotifywait”

Permalänk
Medlem

Om du kan få RegExp Download Organizer att spara till godtyckligt ställe i filsystemet så är det väl bara att mounta SMB-sharen på lämpligt ställe i filsystemet och peka RegExp dit?

Permalänk
Medlem

Okej, så jag har ett skript som nästan fungerar...

#!/bin/bash inotifywait -m /home/user/Downloads/semesterbilder -e create -e moved_to | while read dir action file; do if [[ "$file" =~ .*jpg$ ]]; echo "found jpg"; then sleep 5 && mv /home/user/Downloads/semesterbilder/"$file" smb://share/"$file"; fi done

Utan "sleep" försöker den flytta filen innan den har sparats, så nedladdningen misslyckas. Med "sleep" får jag ändå irriterande felmeddelande som:

mv: cannot stat '/home/user/Downloads/semesterbilder/Unconfirmed 319647.crdownload': No such file or directory

Därefter felmeddelande som:

mv: cannot move '/home/user/yadayada/filnamn.jpg to 'smb://share...

Om jag ändrar 'smb://share..' till en lokal mapp fungerar det dock. Alltså, trots meddelandet så flyttas filen. Jag vet dock inte hur jag ska göra för att den ska vilja flytta filen över nätverket.

Har ni förslag på dels hur jag löser problemet och hur jag städar skriptets output?

Permalänk
Medlem
Skrivet av DasIch:

Okej, så jag har ett skript som nästan fungerar...

#!/bin/bash inotifywait -m /home/user/Downloads/semesterbilder -e create -e moved_to | while read dir action file; do if [[ "$file" =~ .*jpg$ ]]; echo "found jpg"; then sleep 5 && mv /home/user/Downloads/semesterbilder/"$file" smb://share/"$file"; fi done

Utan "sleep" försöker den flytta filen innan den har sparats, så nedladdningen misslyckas. Med "sleep" får jag ändå irriterande felmeddelande som:

mv: cannot stat '/home/user/Downloads/semesterbilder/Unconfirmed 319647.crdownload': No such file or directory

Därefter felmeddelande som:

mv: cannot move '/home/user/yadayada/filnamn.jpg to 'smb://share...

Om jag ändrar 'smb://share..' till en lokal mapp fungerar det dock. Alltså, trots meddelandet så flyttas filen. Jag vet dock inte hur jag ska göra för att den ska vilja flytta filen över nätverket.

Har ni förslag på dels hur jag löser problemet och hur jag städar skriptets output?

Se inlägget ovan. Varför har du inte monterat smb-sharen?

Visa signatur

Spela Swemantle! Du vet att du vill.

Ibland har jag fel, men då är det någon annans fel.

Permalänk
Medlem
Skrivet av LemonIllusion:

Se inlägget ovan. Varför har du inte monterat smb-sharen?

Den blir automagiskt mountad i /var/run/user/1000/gvfs/smb-share/ tydligen. Passar mig bra, pekar jag skriptet dit så fungerar det.

RegExp går bara att peka till default nedladdningsmapp och underliggande mappar och där vill jag inte montera smb-sharen.

Nu behöver jag bara putsa till skriptet och köra som en enkel service så blir det precis som jag vill ha det.

Problemen nu är meddelandena om "cannot stat" samt en ny variant:

mv: preserving permissions for ‘/run/user/1000/gvfs/smb-share:/.../semesterbild.jpg’: Operation not supported

Vet inte om det senare är ett problem. Förstår jag det rätt får filen de permissions jag satt på min smb-share, och det verkar bäst så.

Permalänk
Medlem
Skrivet av DasIch:

Den blir automagiskt mountad i /var/run/user/1000/gvfs/smb-share/ tydligen. Passar mig bra, pekar jag skriptet dit så fungerar det.

RegExp går bara att peka till default nedladdningsmapp och underliggande mappar och där vill jag inte montera smb-sharen.

Jag gissar att du i så fall kan lägga en symlänk i nerladdningsmappen. Så länge symlänken pekar på en mountad mapp så borde det fungera, men du kan nog (som du märkt) inte peka en symlänk på en UNC-path.

Permalänk
Medlem

Den automatskapade mountningen kommer nog för övrigt från Gnome. Den lever och dör antagligen med skrivbordsmiljön, vilket kanske kan fungera, men en egen mount där du kan styra rättigheterna efter eget huvud tycker jag verkar vettigare.

Cannot stat verkar hända eftersom browsern laddar ner en temporär fil (som plockas upp av inotify) och som sedan döps om till det riktiga filnamnet. Efter sleep finns temporärfilen inte längre kvar. Din if-sats som kollar om det är en jpg-fil verkar inte fungera. Mina bash-skills är begränsade men... ett semikolon för mycket och/eller ett then för lite?

Permalänk
Medlem
Skrivet av KAD:

Den automatskapade mountningen kommer nog för övrigt från Gnome. Den lever och dör antagligen med skrivbordsmiljön, vilket kanske kan fungera, men en egen mount där du kan styra rättigheterna efter eget huvud tycker jag verkar vettigare.

Ja, stämmer nog att den automagiska monteringen kommer från Gnome. Jag känner inte att jag har tillräcklig koll på hur det funkar med rättigheter ifall jag ger den en egen monteringspunkt och rättigheterna sedan ändras. Vill minnas att jag bråkat med problem som uppkommit av det förut.

Citat:

Cannot stat verkar hända eftersom browsern laddar ner en temporär fil (som plockas upp av inotify) och som sedan döps om till det riktiga filnamnet. Efter sleep finns temporärfilen inte längre kvar. Din if-sats som kollar om det är en jpg-fil verkar inte fungera. Mina bash-skills är begränsade men... ett semikolon för mycket och/eller ett then för lite?

Det verkar som 'then' behövde hoppa upp en rad. Nu får jag visserligen fortfarande 'cannot stat' men den hugger rätt filer i varje fall. Såhär ser det ut nu:

#!/bin/bash inotifywait -m /home/user/semesterbilder -e create -e moved_to | while read dir action file; do if [[ "$file" =~ .*jpg$ ]]; then echo "Found" && cp /home/user/semesterbilder/"$file" \ /run/user/1000/gvfs/smb-share\:server\=tralala/semesterbilder/"$file" && rm /home/user/semesterbilder/"$file"; fi done

Jag ändrade från 'mv' till 'cp' och 'rm' för att slippa problem med permissions. Men fortfarande något som inte riktigt stämmer med tanke på 'cannot stat'.

Edit: Nu när hjärnan vaknat är det rätt uppenbart varför jag får "cannot stat" meddelandet. Är if-satsen sann kör ju skriptet loopen tills den misslyckas, och andra varvet runt finns ju inte filen kvar.

Permalänk
Medlem

Du kan även kolla in incrond https://wiki.archlinux.org/index.php/Incron
incron is a daemon which monitors filesystem events and executes commands defined in system and user tables.

Du borde dock kunna lösa det i chrome tycker man.