user3352298
user3352298

Reputation: 1

Script to move files

I used a script to create sub-directories based on the file names of all my mp4 files. My files and newly created sub directories, of the same name, are located in the smae sub directory. Now I need a script to move the mp4 files into each of the files corresponding sub directories. I hope this makes sense. ex: I would like to move "crank (2006).mp4" to the sub directory named "crank (2006)". I have about 1200 of these files to move to their already created sub directories. Please help.

Upvotes: 0

Views: 127

Answers (3)

user3367314
user3367314

Reputation: 17

Following code will,

  • find the .mp4 files in current directory,
  • create sub-directories based on the file names of all mp4 files,
  • move each of the files to corresponding sub directories

    for f in *.mp4; do path=$(ls $f | rev | cut -c 5- | rev); mkdir $path; mv $f $path/. ; done
    

Ex: if "crank (2006).mp4" is available into current directory than new sub directory named "crank (2006)" will be created into current directory and "crank (2006).mp4" file will be moved into that sub-directory.

NOTE: instead of "mv" you can also use "cp" for copy files

Upvotes: 0

suspectus
suspectus

Reputation: 17258

Removing the .mp4 suffix uses %% to delete the sub-string .mp4 from the end of the $f variable.

The mkdir statement ensures that the sub-directory does exist before the mv command.

for f in *.mp4
do
    subdir="${f%%.mp4}"
    mkdir -p "$subdir"
    mv "$f" "$subdir"
done

Upvotes: 1

bobbogo
bobbogo

Reputation: 15483

mmv 'smae/*.mp4' 'smae/#1/#1.mp4'

This is much safer than (noddy) scripts as mmv will check for loops, name collisions, possible problems in the move before moving any file etc.

Upvotes: 0

Related Questions