Visit Our UNIX and Linux User Community


Script to order my video library :-)


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Script to order my video library :-)
# 1  
Old 09-05-2013
Script to order my video library :-)

Dear friends,
I have a hundred or so videos I keep in a directory, but as the collection has grown anarchically in the past years I have at least 3 different situations:

a) one directory for each video and within it the video and any other accompaining files (mostly text files with my notes and reviews). This is the desired end state for all of them

b) a single movie file sitting in the top directory (extensions can be flc, mkv, avi,mpg etc.). These I would like to move into a directory with the same name as the file

c) single non-movie files. these I'd ignore for now.

Thanks for any help.
# 2  
Old 09-05-2013
If these files have been renamed by hand and such, organizing these by computer, matching dissimilar names, may be extremely difficult.
# 3  
Old 09-05-2013
Quote:
Originally Posted by rjalex
Dear friends,
I have a hundred or so videos I keep in a directory, but as the collection has grown anarchically in the past years I have at least 3 different situations:

a) one directory for each video and within it the video and any other accompaining files (mostly text files with my notes and reviews). This is the desired end state for all of them

b) a single movie file sitting in the top directory (extensions can be flc, mkv, avi,mpg etc.). These I would like to move into a directory with the same name as the file

c) single non-movie files. these I'd ignore for now.

Thanks for any help.
Am I correct in interpreting your requirements to be:
  1. You are sitting in a directory that contains both regular files and directories.
  2. You do not want to do anything with any files in directories under the directory in which you're sitting.
  3. You want to move regular files that have a file extension (such as .flc, .mkv, .avi, .mpg, or anything else) into a new directory. (It isn't clear to me whether you want to move a regular file like "movie.mkv" to "movie.mkv/movie.mkv" or to move it to "movie/movie.mkv". Which do you want?)
  4. You do not want to move (or remove) regular files that do not have a file extension.
Is this correct? (And, if so, do you want new directory names to have the extension stripped off from the names of the files that will be moved to them?)

Last edited by Don Cragun; 09-05-2013 at 02:17 PM.. Reason: Fix typos
This User Gave Thanks to Don Cragun For This Post:
# 4  
Old 09-06-2013
Quote:
Originally Posted by Don Cragun
Am I correct in interpreting your requirements to be:
  1. You are sitting in a directory that contains both regular files and directories.
  2. You do not want to do anything with any files in directories under the directory in which you're sitting.
  3. You want to move regular files that have a file extension (such as .flc, .mkv, .avi, .mpg, or anything else) into a new directory. (It isn't clear to me whether you want to move a regular file like "movie.mkv" to "movie.mkv/movie.mkv" or to move it to "movie/movie.mkv". Which do you want?)
  4. You do not want to move (or remove) regular files that do not have a file extension.
Is this correct? (And, if so, do you want new directory names to have the extension stripped off from the names of the files that will be moved to them?)
Sir,
despite my wobbly English you have understood everything !!!! :-)

The files to be moved into a newly created directory should belong only to a defined set of extension. All other extensions should be ignored (for example move.txt will remain where it is).

What I need is the newly created directory to be stripped of the file extension (which luckily appears always to be a dot followed by 3 letters).

This should also cover the theoretical case (I do not seem to have any) of two regular files with the same name but two different extensions (e.g. movie5.mkv and movie5.avi and they should both end up in the same movie5 directory).

I tried whipping up a find command to address the generation of the file list but I am under the impression that the command behaves DIFFERENTLY on Debian and on Mac OS (the two Unices I'm using) :-(

Thanks so much for trying to help.

---------- Post updated at 10:47 AM ---------- Previous update was at 09:17 AM ----------

I tried starting this script and have gone somewhere although still not want I want:

Code:
#!/bin/sh
find . -type f -maxdepth 1 | while read FILE
do
    DIR=$(echo $FILE | sed 's/\....$//')
    if [ ! -d "$DIR" ]
    then
                echo mkdir "$DIR"
    fi
    echo mv "$FILE" "$DIR"
done

It's not creating the directory if for example the file contains spaces, and therefore the mkdir fails

It's not selecting only the desired extensions

Ciao !

Last edited by rjalex; 09-06-2013 at 04:25 AM.. Reason: tried to express myself better
# 5  
Old 09-06-2013
I tested the following using both ksh and bash on Mac OS X even with files named Marvel's Agents of S.H.I.E.L.D..mkv and Marvel's Agents of S.H.I.E.L.D..jpeg and it did what I expected. Having quotes, multiple periods, and spaces in the name seemed like a reasonable test for things you're likely to encounter:
Code:
#!/bin/ksh
for i in *.*
do      if [ ! -f "$i" ]        # Verify that we have a regular file...
        then    continue        # if not; skip to next file.
        fi
        dir=${i%.*}             # Strip off the final filename extension.
        if [ ! -d "$dir" ]      # If the target directory is not present...
        then    mkdir "$dir"    # create it.
        fi
        mv "$i" "$dir"          # Move the file into the appropriate directory.
done

As written this would move the above two mentioned files and Marvel's Agents of S.H.I.E.L.D..txt into a directory named Marvel's Agents of S.H.I.E.L.D.. If you really don't want to move *.txt files into the directory with the assoiated movies with the same base name, change the line in the script:
Code:
for i in *.*

to
Code:
for i in *.flc *.mkv *.avi *.mpg

and add any other filename extensions you want to be processed to the list in the same way. You can put echo in front of the mkdir and mv commands to visually verify that it will do what you want; but, obviously, it won't actually create the directories or move the files as long as those echo commands remain in your script.

Note that this script (and yours) will fail if you have a text file named movie and a file such as movie.mkv because if won't be able to create the directory named "movie" if you already have another file with that name.
This User Gave Thanks to Don Cragun For This Post:
# 6  
Old 09-06-2013
Thank you so so so so so much :-)
Take care and whenever you'll need a good recipe for pasta I'll be able to repay my debt ;-)
Robert
Rome - Italy

Previous Thread | Next Thread
Test Your Knowledge in Computers #847
Difficulty: Medium
Proximity marketing is the localized wireless distribution of advertising content associated with a particular place.
True or False?

6 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script Execution Order

Hi, I have two scripts which are mentioned in execute.sh more execute.sh ./script1.sh //line 1 should not return error ./script2.sh //line 2 may return error ./script2.sh //line 3 should not return error Condition: I want script1.sh to complete before starting script2.sh... (1 Reply)
Discussion started by: mohtashims
1 Replies

2. Shell Programming and Scripting

Script to solve second order (polynomial) interpolation

Currently I have awk command to do linear interpolation awk ' { P=$2 I=$1 } END { j=0; s=I; t=I for(i=m;i<=n;i++) { if(I && i>t) { j++; s=I; t=I } print i, P+(i-s)*(P-P)/(t-s) } } ' m=1 n=8 infile FILE CONTENT... (8 Replies)
Discussion started by: Tzeronone
8 Replies

3. Shell Programming and Scripting

script for remove descending order number

hi all i want to remove some descending order number example : 1 100 200 135.00 Gk_wirs 1 1 100 200 136.00 Gk_wirs 50 1 110 210 138.00 Gk_wirs 60 1 100 200 136.00 Gk_wirs 57 ----> how to remove... (6 Replies)
Discussion started by: nithyanandan
6 Replies

4. UNIX for Advanced & Expert Users

Video Cards :: Video Memory Intercept and Redirect

I need a broad spectrum understanding on this subject, and any help would be greatly appreciated. First of all, as I understand it... The way the video hardware works is the CPU sends information about input and possible changes to the display, the video card receives these changes, makes the... (2 Replies)
Discussion started by: ciNG
2 Replies

5. Linux

USB video capture? composite, s-video, etc

does anybody have any experience with any of these composite video to usb devices on linux? usb video capture - Google Product Search would like to get one but a linux newbie and having trouble figuring out if any are ported... i've found lots of things that link to freedesktop.org DisplayLink... (1 Reply)
Discussion started by: danpaluska
1 Replies

6. UNIX for Dummies Questions & Answers

Changing the order of columns in a script

I have the following script: (echo -n `curl http://www.example.com/scores.txt | grep mylocation`; date +%Y%m%d%H%M%S) >> myscores.txt This script works fine, except that it places the timestamp at the end of the file myscores.txt. How do add the timestamp as the first column and then a tab and... (4 Replies)
Discussion started by: figaro
4 Replies

Featured Tech Videos