1. Welcome to TechPowerUp Forums, Guest! Please check out our forum guidelines for info related to our community.

scripting help

Discussion in 'Linux / BSD / Mac OS X' started by Killer_Rubber_Ducky, Dec 25, 2012.

  1. Killer_Rubber_Ducky

    Killer_Rubber_Ducky

    Joined:
    Oct 20, 2009
    Messages:
    2,687 (1.54/day)
    Thanks Received:
    294
    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.
  2. Mindweaver

    Mindweaver Moderato®™ Staff Member

    Joined:
    Apr 16, 2009
    Messages:
    5,148 (2.66/day)
    Thanks Received:
    2,653
    Location:
    Statesville, NC
    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
    
    Killer_Rubber_Ducky says thanks.
    Crunching for Team TPU
  3. Killer_Rubber_Ducky

    Killer_Rubber_Ducky

    Joined:
    Oct 20, 2009
    Messages:
    2,687 (1.54/day)
    Thanks Received:
    294
    This will work in linux right? It looks very close to BASIC
  4. Mindweaver

    Mindweaver Moderato®™ Staff Member

    Joined:
    Apr 16, 2009
    Messages:
    5,148 (2.66/day)
    Thanks Received:
    2,653
    Location:
    Statesville, NC
    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 :toast: 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
    Last edited: Dec 26, 2012
    Aquinus and Killer_Rubber_Ducky say thanks.
    Crunching for Team TPU
  5. Aquinus

    Aquinus Resident Wat-man

    Joined:
    Jan 28, 2012
    Messages:
    6,006 (6.56/day)
    Thanks Received:
    1,955
    Location:
    Concord, NH
    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? :p
  6. MT Alex

    MT Alex

    Joined:
    Aug 2, 2009
    Messages:
    3,750 (2.05/day)
    Thanks Received:
    1,605
    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.
  7. Killer_Rubber_Ducky

    Killer_Rubber_Ducky

    Joined:
    Oct 20, 2009
    Messages:
    2,687 (1.54/day)
    Thanks Received:
    294
    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: Dec 26, 2012
  8. Mindweaver

    Mindweaver Moderato®™ Staff Member

    Joined:
    Apr 16, 2009
    Messages:
    5,148 (2.66/day)
    Thanks Received:
    2,653
    Location:
    Statesville, NC
    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. :toast:

    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
    
    Killer_Rubber_Ducky says thanks.
    Crunching for Team TPU
  9. Killer_Rubber_Ducky

    Killer_Rubber_Ducky

    Joined:
    Oct 20, 2009
    Messages:
    2,687 (1.54/day)
    Thanks Received:
    294
    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.
  10. Aquinus

    Aquinus Resident Wat-man

    Joined:
    Jan 28, 2012
    Messages:
    6,006 (6.56/day)
    Thanks Received:
    1,955
    Location:
    Concord, NH
    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.
    Easy Rhino and Mindweaver say thanks.
  11. SIGSEGV

    SIGSEGV

    Joined:
    Mar 31, 2012
    Messages:
    504 (0.59/day)
    Thanks Received:
    107
    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
  12. Aquinus

    Aquinus Resident Wat-man

    Joined:
    Jan 28, 2012
    Messages:
    6,006 (6.56/day)
    Thanks Received:
    1,955
    Location:
    Concord, NH
    Someone doesn't know what they're talking about and should refrain from posting when that is the case. :banghead:
    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
    Last edited: Dec 27, 2012
  13. Killer_Rubber_Ducky

    Killer_Rubber_Ducky

    Joined:
    Oct 20, 2009
    Messages:
    2,687 (1.54/day)
    Thanks Received:
    294
    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.
    Aquinus says thanks.
  14. Aquinus

    Aquinus Resident Wat-man

    Joined:
    Jan 28, 2012
    Messages:
    6,006 (6.56/day)
    Thanks Received:
    1,955
    Location:
    Concord, NH
    Right on. Get a head start, it's an administrator's best friend. :cool:
    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. :p
  15. SIGSEGV

    SIGSEGV

    Joined:
    Mar 31, 2012
    Messages:
    504 (0.59/day)
    Thanks Received:
    107
    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.. .:laugh:
    i found it funny..

    thanks for your correction :toast:
    Aquinus says thanks.
  16. Aquinus

    Aquinus Resident Wat-man

    Joined:
    Jan 28, 2012
    Messages:
    6,006 (6.56/day)
    Thanks Received:
    1,955
    Location:
    Concord, NH
    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.) ;)
  17. Mindweaver

    Mindweaver Moderato®™ Staff Member

    Joined:
    Apr 16, 2009
    Messages:
    5,148 (2.66/day)
    Thanks Received:
    2,653
    Location:
    Statesville, NC
    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. :toast: Call it bias of me, but I tend not to give the full answer as quickly to Linux users as I do Windows users. :shadedshu I know I shouldn't, but I do.. ;) :toast:
    Aquinus says thanks.
    Crunching for Team TPU

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

Share This Page