techPowerUp! Forums

Go Back   techPowerUp! Forums > Software > Linux / BSD / Mac OS X

Reply
 
Thread Tools
Old Dec 25, 2012, 04:17 PM   #1
Killer_Rubber_Ducky
500 Posts
 
Killer_Rubber_Ducky's Avatar
 
Join Date: Oct 2009
Location: Starkville, MS
Posts: 878 (0.67/day)
Thanks: 1,002
Thanked 256 Times in 190 Posts

System Specs

scripting help

Hi guys,

I'm not familiar with scripting but I have a task and have found no program to accomplish the task.

I read alot of ebooks in different formats: epub, pdf, rtf, etc
I have different folders for the formats.
I have to move them from the Downloads folder to the respective folders which can be annoying and time consuming since there tend to be quite a few.

I need either a script or a program that can watch my Downloads folder and move the files to the folders.

The path for the downloads folder is /home/ian/Downloads
The path for the RTF folder is: /home/ian/Documents/Fanfiction/RTF
The path for the EPUB folder is: /home/ian/Documents/Fanficiton/EPUB
The path for the PDF folder is: /home/ian/Documents/Fanfiction/PDF
and the path for the HTML folder is: /home/ian/Documents/Fanfiction/HTML

There is a windows program that does this called QuickMove.
__________________
Heatware

'To err is human, to really mess things up requires a computer.'
Killer_Rubber_Ducky is offline  
Reply With Quote
Old Dec 26, 2012, 01:38 PM   #2
Mindweaver
Moderato®™
 
Mindweaver's Avatar
 
Join Date: Apr 2009
Location: Statesville, NC
Posts: 3,623 (2.42/day)
Thanks: 4,313
Thanked 2,316 Times in 1,148 Posts

System Specs

Here is a batch file you can use.

Copy this into a text file and rename the text file to .bat

Code:
@echo off

color 9F
echo ### Mindweaver's File Mover
ECHO ---------------------------
ECHO -
ECHO -
ECHO Select a type of file to move.
ECHO 1. PDF
ECHO 2. RTF
ECHO 3. EPUB
ECHO 4. HTML
ECHO 5. ALL

set PDF=%USERPROFILE%\Downloads\*.pdf
set RTF=%USERPROFILE%\Downloads\*.rtf
set EPUB=%USERPROFILE%\Downloads\*.epub
set HTML=%USERPROFILE%\Downloads\*.html
set folder1=%USERPROFILE%\Documents\PDF
set folder2=%USERPROFILE%\Documents\RTF
set folder3=%USERPROFILE%\Documents\EPUB
set folder4=%USERPROFILE%\Documents\HTML
set Movecmd=Move /y

set /p userinp=choose a number(1-5):
set userinp=%userinp:~0,1%
if "%userinp%"=="1" goto 1
if "%userinp%"=="2" goto 2
if "%userinp%"=="3" goto 3
if "%userinp%"=="4" goto 4
if "%userinp%"=="5" goto 5


:1
CLS
echo ### Moving PDF's
%Movecmd% "%PDF%" "%folder1%"
GOTO EXIT

:2
CLS
echo ### Moving RTF's
%Movecmd% "%RTF%" "%folder2%"
GOTO EXIT

:3
CLS
echo ### Moving EPUB's
%Movecmd% "%EPUB%" "%folder3%"
GOTO EXIT

:4
CLS
echo ### Moving HTML's
%Movecmd% "%HTML%" "%folder4%"
GOTO EXIT

:5
CLS
echo ### Moving PDF's
%Movecmd% "%PDF%" "%folder4%"
echo 25% complete
%Movecmd% "%RTF%" "%folder2%"
echo 50% complete
%Movecmd% "%EPUB%" "%folder3%"
echo 75% complete
%Movecmd% "%HTML%" "%folder4%"
GOTO EXIT

:EXIT
echo Move Complete!
@pause
__________________
“As long as I feel the warmth from the sun and breathe precious air…. I must ask questions to feed the Mind!”

Battletag: Mindweaver#1523
Mindweaver is offline  
Crunching for Team TPU
Reply With Quote
The Following User Says Thank You to Mindweaver For This Useful Post:
Old Dec 26, 2012, 01:54 PM   #3
Killer_Rubber_Ducky
500 Posts
 
Killer_Rubber_Ducky's Avatar
 
Join Date: Oct 2009
Location: Starkville, MS
Posts: 878 (0.67/day)
Thanks: 1,002
Thanked 256 Times in 190 Posts

System Specs

This will work in linux right? It looks very close to BASIC
Killer_Rubber_Ducky is offline  
Reply With Quote
Old Dec 26, 2012, 02:06 PM   #4
Mindweaver
Moderato®™
 
Mindweaver's Avatar
 
Join Date: Apr 2009
Location: Statesville, NC
Posts: 3,623 (2.42/day)
Thanks: 4,313
Thanked 2,316 Times in 1,148 Posts

System Specs

Quote:
Originally Posted by Killer_Rubber_Ducky View Post
This will work in linux right? It looks very close to BASIC
Naw.. I quickly copied an old windows batch file I had and posted it for you.. I'm working on a Linux one now.. I have an old Unix one I use to use... Should still work Sorry buddy and I moved this thread back to the Linux thread.

EDIT: I left the code here for Windows users.. Linux would be something like this for the move command.
Code:
#!/bin/bash
mv from to

You can use CASE instead of GOTO
__________________
“As long as I feel the warmth from the sun and breathe precious air…. I must ask questions to feed the Mind!”

Battletag: Mindweaver#1523

Last edited by Mindweaver; Dec 26, 2012 at 02:47 PM.
Mindweaver is offline  
Crunching for Team TPU
Reply With Quote
The Following 2 Users Say Thank You to Mindweaver For This Useful Post:
Old Dec 26, 2012, 04:21 PM   #5
Aquinus
3500 Posts
 
Aquinus's Avatar
 
Join Date: Jan 2012
Location: Dover, New Hampshire, USA
Posts: 4,239 (8.87/day)
Thanks: 1,262
Thanked 1,318 Times in 979 Posts

System Specs

Quote:
Originally Posted by Killer_Rubber_Ducky View Post
This will work in linux right? It looks very close to BASIC
The BASH form would be pretty easy.

It would look something like this (I don't think a UI is necessary):

Code:
#!/bin/bash
pathfrom="/path/to/downloads/folder"
pathto="/path/to/store/files"

mv "$pathfrom/*.pdf" "$pathto/PDF"
mv "$pathfrom/*.rtf" "$pathto/RTF"
mv "$pathfrom/*.epub" "$pathto/EPUB"
mv "$pathfrom/*.html" "$pathto/HTML"
Basically is just moves everything it encounters when you run the script. This should work, but I haven't tested it.

Edit: If you wanted a UI, you could easily just add a SWITCH/CASE statement plus a little usage output.

@Mindweaver: Ewww, really? GOTO?
__________________
MyHeat
Aquinus is online now  
Crunching for Team TPU
Reply With Quote
The Following 2 Users Say Thank You to Aquinus For This Useful Post:
Old Dec 26, 2012, 05:03 PM   #6
MT Alex
2000 Posts
 
MT Alex's Avatar
 
Join Date: Aug 2009
Location: Montana
Posts: 2,018 (1.45/day)
Thanks: 2,535
Thanked 1,323 Times in 917 Posts

System Specs

Just use Calibre and convert them into one file type, or keep them all in a single Calibre folder since Calibre will open them all, anyhow.
__________________
“growing up, i always wanted to be a vet. til i learned there was more to being a vet than just putting down cats all day.” -digibucc

MT Alex is offline  
Reply With Quote
Old Dec 26, 2012, 05:10 PM   #7
Killer_Rubber_Ducky
500 Posts
 
Killer_Rubber_Ducky's Avatar
 
Join Date: Oct 2009
Location: Starkville, MS
Posts: 878 (0.67/day)
Thanks: 1,002
Thanked 256 Times in 190 Posts

System Specs

Quote:
Originally Posted by MT Alex View Post
Just use Calibre and convert them into one file type, or keep them all in a single Calibre folder since Calibre will open them all, anyhow.
I actually use flagfic to handle it. Then fbreader for the reading. I tried calibre but every time it screws up the format. I like rtf and html but sometimes it looks and reads better through pdf or epub.

****Update****
Here is what I get when I run the script.
Code:
ian@ian-Lenovo-G570:~$ ./quickmove.sh
./quickmove.sh: line 2: pathfrom: command not found
./quickmove.sh: line 3: pathto: command not found
mv: cannot stat `/*.pdf': No such file or directory
mv: cannot stat `/*.rtf': No such file or directory
mv: cannot stat `/*.epub': No such file or directory
mv: cannot stat `/*.html': No such file or directory
ian@ian-Lenovo-G570:~$ ./quickmove.sh
./quickmove.sh: line 2: /home/ian/Downloads: Is a directory
./quickmove.sh: line 3: /home/ian/Documents/Fanfiction: Is a directory
mv: cannot stat `/*.pdf': No such file or directory
mv: cannot stat `/*.rtf': No such file or directory
mv: cannot stat `/*.epub': No such file or directory
mv: cannot stat `/*.html': No such file or directory
ian@ian-Lenovo-G570:~$
Here is the script:
Code:
#!/bin/bash
pathfrom= "/home/ian/Downloads"
pathto= "/home/ian/Documents/Fanfiction"

mv "$pathfrom/*.pdf" "$pathto/PDF"
mv "$pathfrom/*.rtf" "$pathto/RTF"
mv "$pathfrom/*.epub" "$pathto/EPUB"
mv "$pathfrom/*.html" "$pathto/HTML"

Last edited by Killer_Rubber_Ducky; Dec 26, 2012 at 10:45 PM.
Killer_Rubber_Ducky is offline  
Reply With Quote
Old Dec 26, 2012, 11:20 PM   #8
Mindweaver
Moderato®™
 
Mindweaver's Avatar
 
Join Date: Apr 2009
Location: Statesville, NC
Posts: 3,623 (2.42/day)
Thanks: 4,313
Thanked 2,316 Times in 1,148 Posts

System Specs

Quote:
Originally Posted by Killer_Rubber_Ducky View Post
I actually use flagfic to handle it. Then fbreader for the reading. I tried calibre but every time it screws up the format. I like rtf and html but sometimes it looks and reads better through pdf or epub.

****Update****
Here is what I get when I run the script.
Code:
ian@ian-Lenovo-G570:~$ ./quickmove.sh
./quickmove.sh: line 2: pathfrom: command not found
./quickmove.sh: line 3: pathto: command not found
mv: cannot stat `/*.pdf': No such file or directory
mv: cannot stat `/*.rtf': No such file or directory
mv: cannot stat `/*.epub': No such file or directory
mv: cannot stat `/*.html': No such file or directory
ian@ian-Lenovo-G570:~$ ./quickmove.sh
./quickmove.sh: line 2: /home/ian/Downloads: Is a directory
./quickmove.sh: line 3: /home/ian/Documents/Fanfiction: Is a directory
mv: cannot stat `/*.pdf': No such file or directory
mv: cannot stat `/*.rtf': No such file or directory
mv: cannot stat `/*.epub': No such file or directory
mv: cannot stat `/*.html': No such file or directory
ian@ian-Lenovo-G570:~$
Here is the script:
Code:
#!/bin/bash
pathfrom= "/home/ian/Downloads"
pathto= "/home/ian/Documents/Fanfiction"

mv "$pathfrom/*.pdf" "$pathto/PDF"
mv "$pathfrom/*.rtf" "$pathto/RTF"
mv "$pathfrom/*.epub" "$pathto/EPUB"
mv "$pathfrom/*.html" "$pathto/HTML"
Your paths are wrong. Try doing it with out declaring Variables. When you get the path correct then clean up your code and declare variables.

Code:
#!/bin/bash
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/PDF
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/RTF
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/EPUB
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/HTML
__________________
“As long as I feel the warmth from the sun and breathe precious air…. I must ask questions to feed the Mind!”

Battletag: Mindweaver#1523
Mindweaver is offline  
Crunching for Team TPU
Reply With Quote
The Following User Says Thank You to Mindweaver For This Useful Post:
Old Dec 26, 2012, 11:30 PM   #9
Killer_Rubber_Ducky
500 Posts
 
Killer_Rubber_Ducky's Avatar
 
Join Date: Oct 2009
Location: Starkville, MS
Posts: 878 (0.67/day)
Thanks: 1,002
Thanked 256 Times in 190 Posts

System Specs

Quote:
Originally Posted by Aquinus View Post
The BASH form would be pretty easy.

It would look something like this (I don't think a UI is necessary):

Code:
#!/bin/bash
pathfrom="/path/to/downloads/folder"
pathto="/path/to/store/files"

mv "$pathfrom/*.pdf" "$pathto/PDF"
mv "$pathfrom/*.rtf" "$pathto/RTF"
mv "$pathfrom/*.epub" "$pathto/EPUB"
mv "$pathfrom/*.html" "$pathto/HTML"
Basically is just moves everything it encounters when you run the script. This should work, but I haven't tested it.

Edit: If you wanted a UI, you could easily just add a SWITCH/CASE statement plus a little usage output.

@Mindweaver: Ewww, really? GOTO?
Quote:
Originally Posted by Mindweaver View Post
Your paths are wrong. Try doing it with out declaring Variables. When you get the path correct then clean up your code and declare variables.

Code:
#!/bin/bash
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/PDF
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/RTF
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/EPUB
mv /home/ian/Downloads /home/ian/Documents/Fanfiction/HTML
Thanks for clearing that up. I found a working solution on bashscripts.org.

Here is my code:
Code:
#!/bin/bash
#Ian's File Moving Script


shopt -s extglob
mv -f $HOME/Downloads/*.pdf $HOME/Documents/Fanfiction/PDF
mv -f $HOME/Downloads/*.rtf $HOME/Documents/Fanfiction/RTF
mv -f $HOME/Downloads/*.epub $HOME/Documents/Fanfiction/EPUB
mv -f $HOME/Downloads/*.html $HOME/Documents/Fanfiction/HTML/NewDownloads/December
The Only thing missing that i have yet to figure out is how to make it not post errors when the file type is not found. Maybe have it say " no .ext found" when there are no files of said extention. And "(x) .ext files moved" when files are moved. the (x) being the number of files under that extension.
__________________
Heatware

'To err is human, to really mess things up requires a computer.'
Killer_Rubber_Ducky is offline  
Reply With Quote
Old Dec 26, 2012, 11:57 PM   #10
Aquinus
3500 Posts
 
Aquinus's Avatar
 
Join Date: Jan 2012
Location: Dover, New Hampshire, USA
Posts: 4,239 (8.87/day)
Thanks: 1,262
Thanked 1,318 Times in 979 Posts

System Specs

Quote:
Originally Posted by Killer_Rubber_Ducky View Post
The Only thing missing that i have yet to figure out is how to make it not post errors when the file type is not found. Maybe have it say " no .ext found" when there are no files of said extention. And "(x) .ext files moved" when files are moved. the (x) being the number of files under that extension.
add a stderr redirection
Quote:
mv -f /x/y/z a/b/c 2> /dev/null
That will pipe stderr to nothing. If you want to make a log, then just replace /dev/null with the location of your log.

Quote:
Originally Posted by Mindweaver View Post
Your paths are wrong. Try doing it with out declaring Variables. When you get the path correct then clean up your code and declare variables.
The variable didn't work because his syntax was wrong. No space between the variable name, equals, and the path string.

Code:
#correct: variablex="applepie"
#incorrect: variablex= "applepie"
If you use linux, I highly recommend learning BASH.
__________________
MyHeat
Aquinus is online now  
Crunching for Team TPU
Reply With Quote
The Following 2 Users Say Thank You to Aquinus For This Useful Post:
Old Dec 27, 2012, 12:34 AM   #11
SIGSEGV
200 Posts
 
SIGSEGV's Avatar
 
Join Date: Mar 2012
Location: Bandung, Indonesia
Posts: 363 (0.87/day)
Thanks: 103
Thanked 73 Times in 45 Posts

System Specs

Quote:
Originally Posted by Aquinus View Post

The variable didn't work because his syntax was wrong. No space between the variable name, equals, and the path string.
i don't think so, it's clear enough for me given by that error messages, bash cannot find program called pathto and pathfrom, you should remember that bash will evaluate every line and find the appropriate program to execute, except you put $ in front of variable.

Code:
#!/bin/bash
$pathfrom="/path/to/downloads/folder"
$pathto="/path/to/store/files"

mv "$pathfrom/*.pdf" "$pathto/PDF"
mv "$pathfrom/*.rtf" "$pathto/RTF"
mv "$pathfrom/*.epub" "$pathto/EPUB"
mv "$pathfrom/*.html" "$pathto/HTML"
fixed


Code:
#correct: $variablex="applepie"
#correct: $variablex= "applepie"
this code is allowed in bash and has same meaning
__________________


And if you hear me talking on the wind
You've got to understand
We must remain perfect strangers
[Deep Purple - Perfect Strangers]
SIGSEGV is offline  
Reply With Quote
Old Dec 27, 2012, 12:45 AM   #12
Aquinus
3500 Posts
 
Aquinus's Avatar
 
Join Date: Jan 2012
Location: Dover, New Hampshire, USA
Posts: 4,239 (8.87/day)
Thanks: 1,262
Thanked 1,318 Times in 979 Posts

System Specs

Quote:
Originally Posted by SIGSEGV View Post
this code is allowed in bash and has same meaning
Someone doesn't know what they're talking about and should refrain from posting when that is the case.
Sounds like the OP poster isn't the only person who needs to learn BASH...

Code:
jdoane@khan:~$ somevar1="someweirdstring"
jdoane@khan:~$ somevar2= "someweirdstring"
someweirdstring: command not found
jdoane@khan:~$ echo $somevar1
someweirdstring
jdoane@khan:~$ echo $somevar2

jdoane@khan:~$
You also only use the $ when you're referencing the variable, not when you're assigning it...
Code:
jdoane@khan:~$ $someothervar="applepie"
=applepie: command not found
__________________
MyHeat

Last edited by Aquinus; Dec 27, 2012 at 12:57 AM.
Aquinus is online now  
Crunching for Team TPU
Reply With Quote
Old Dec 27, 2012, 12:57 AM   #13
Killer_Rubber_Ducky
500 Posts
 
Killer_Rubber_Ducky's Avatar
 
Join Date: Oct 2009
Location: Starkville, MS
Posts: 878 (0.67/day)
Thanks: 1,002
Thanked 256 Times in 190 Posts

System Specs

Quote:
Originally Posted by Aquinus View Post
add a stderr redirection That will pipe stderr to nothing. If you want to make a log, then just replace /dev/null with the location of your log.



The variable didn't work because his syntax was wrong. No space between the variable name, equals, and the path string.

Code:
#correct: variablex="applepie"
#incorrect: variablex= "applepie"
If you use linux, I highly recommend learning BASH.
well, im in a networking degree program and this next semester we will be covering Linux Administration so I will be learning it. I am more familiar with BASICA/GWBASIC/QBASIC. I wrote Pacman in QBASIC.
__________________
Heatware

'To err is human, to really mess things up requires a computer.'
Killer_Rubber_Ducky is offline  
Reply With Quote
The Following User Says Thank You to Killer_Rubber_Ducky For This Useful Post:
Old Dec 27, 2012, 01:05 AM   #14
Aquinus
3500 Posts
 
Aquinus's Avatar
 
Join Date: Jan 2012
Location: Dover, New Hampshire, USA
Posts: 4,239 (8.87/day)
Thanks: 1,262
Thanked 1,318 Times in 979 Posts

System Specs

Quote:
Originally Posted by Killer_Rubber_Ducky View Post
well, im in a networking degree program and this next semester we will be covering Linux Administration so I will be learning it.
Right on. Get a head start, it's an administrator's best friend.
Quote:
Originally Posted by Killer_Rubber_Ducky View Post
I wrote Pacman in QBASIC.
Nice! Back when I was in school I wrote a networked version of Backgammon using Java in my second year while I was working on my Computer Science degree. It's fun stuff, at least to me.
__________________
MyHeat
Aquinus is online now  
Crunching for Team TPU
Reply With Quote
Old Dec 27, 2012, 01:45 AM   #15
SIGSEGV
200 Posts
 
SIGSEGV's Avatar
 
Join Date: Mar 2012
Location: Bandung, Indonesia
Posts: 363 (0.87/day)
Thanks: 103
Thanked 73 Times in 45 Posts

System Specs

Quote:
Originally Posted by Aquinus View Post
Someone doesn't know what they're talking about and should refrain from posting when that is the case.
Sounds like the OP poster isn't the only person who needs to learn BASH...

Code:
jdoane@khan:~$ somevar1="someweirdstring"
jdoane@khan:~$ somevar2= "someweirdstring"
someweirdstring: command not found
jdoane@khan:~$ echo $somevar1
someweirdstring
jdoane@khan:~$ echo $somevar2

jdoane@khan:~$
You also only use the $ when you're referencing the variable, not when you're assigning it...
Code:
jdoane@khan:~$ $someothervar="applepie"
=applepie: command not found
i thougt it was the same syntax (and also rules) with php or another programming languages when you're assigning some value to any kind of variable.. .
i found it funny..

thanks for your correction
__________________


And if you hear me talking on the wind
You've got to understand
We must remain perfect strangers
[Deep Purple - Perfect Strangers]
SIGSEGV is offline  
Reply With Quote
The Following User Says Thank You to SIGSEGV For This Useful Post:
Old Dec 27, 2012, 02:15 AM   #16
Aquinus
3500 Posts
 
Aquinus's Avatar
 
Join Date: Jan 2012
Location: Dover, New Hampshire, USA
Posts: 4,239 (8.87/day)
Thanks: 1,262
Thanked 1,318 Times in 979 Posts

System Specs

Quote:
Originally Posted by SIGSEGV View Post
i thougt it was the same syntax (and also rules) with php or another programming languages when you're assigning some value to any kind of variable.. .
i found it funny..

thanks for your correction
If I'm not sure, I always test it out. You can never assume that the syntax of different languages will be similar. It definitely is an odd one, that's for sure, but on the other hand BASH was developed with a lot of different things in mind as compared to PHP, Java, ruby, or any other programming language for that matter, considering BASH isn't a programming language, it's a command processor. You write scripts that get evaluated by the processor as input, unlike PHP which gets compiled at runtime (unless you're using an opcode cache.)
__________________
MyHeat
Aquinus is online now  
Crunching for Team TPU
Reply With Quote
Old Dec 27, 2012, 01:19 PM   #17
Mindweaver
Moderato®™
 
Mindweaver's Avatar
 
Join Date: Apr 2009
Location: Statesville, NC
Posts: 3,623 (2.42/day)
Thanks: 4,313
Thanked 2,316 Times in 1,148 Posts

System Specs

Quote:
Originally Posted by Aquinus View Post
The variable didn't work because his syntax was wrong. No space between the variable name, equals, and the path string.
I seen that, but I wanted him to see that as well. I'd rather him start out not using variables until he understands bash better. Call it bias of me, but I tend not to give the full answer as quickly to Linux users as I do Windows users. I know I shouldn't, but I do..
__________________
“As long as I feel the warmth from the sun and breathe precious air…. I must ask questions to feed the Mind!”

Battletag: Mindweaver#1523
Mindweaver is offline  
Crunching for Team TPU
Reply With Quote
The Following User Says Thank You to Mindweaver For This Useful Post:
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 
Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Scripting using Autoit brandonwh64 Programming & Webmastering 0 Jan 6, 2011 04:07 PM
Bash scripting help nick_1992 Programming & Webmastering 2 Dec 12, 2010 05:50 AM
PIE scripting Help sonnytiger Games 0 Feb 12, 2010 02:38 PM
cross-site scripting a111087 Comments & Feedback 15 Dec 21, 2008 05:57 PM


All times are GMT. The time now is 12:22 PM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
no new posts