Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I have a folder that has 200.000 images. I want to do the following:

  1. Move an X amount of images (50 images, 100 images, 200 images) from that folder to Y folder.
  2. Each Y folder can be a number (Folder 1, Folder 2, Folder 3...).
  3. The end result might look like this:

Folder 1 (Has X amount of images) Folder 2 (Has X amount of images) Folder 3 (Has X amount of images) Folder 4 (Has X amount of images)

share|improve this question

3 Answers 3

up vote 3 down vote accepted

Run the script in your image directory. Make sure that destination doesn't have any sub directories.

IMG=100     # Number of images to move
DES="."     # Destination

I=$(find . -maxdepth 1 -mindepth 1 -type f | wc -l)
N=$(( (I / IMG) + (I % IMG) ))
eval mkdir "$DES"/Folder{01..$N}

for i in $(find "$DES" -maxdepth 1 -mindepth 1 -type d | sort); do
    mv $(find . -maxdepth 1 -mindepth 1 -type f | sort | grep -m $IMG '.*') $i
done
share|improve this answer
    
Hi Basharat, the script is good but is not working. It throws the error "line 9: /bin/ls: Argument list too long" because of the 200K images. –  Luis Alvarado Oct 17 '12 at 19:17
    
@LuisAlvarado fixed. –  Basharat Sialvi Oct 18 '12 at 7:24

Try this script, it should fulfil your request but the last X files will remain in the original directory

OrigDIR=~/FolderX
DestDIR=~/FolderY
NumberOfMovedItems=$1
SubDestDir=$2
Count=1

while [ `find $DIR -OrigDIR 1 -type f| wc -l` -gt $NumberOfMovedItems ] ; do
  NewSubDir=$DestDIR/${SubDestDir}${Count}
  mkdir $NewSubDir
  find $OrigDIR -maxdepth 1 -type f | head -n $NumberOfMovedItems | xargs -I {} mv {} $NewSubDir
  let Count++
done

Change the path of FolderX and FolderY as you like.

When you run the script you have to provide number of items to move and name of Subdirectory

Source

share|improve this answer
    
The script as it is, is not working. Already added the $1 and $2. Tested the script you mentioned in the link and that one is working. If you can, please edit your answer to correct the the script. –  Luis Alvarado Oct 17 '12 at 19:17

I would start with creating a list

ls X > X.list
for Y in `seq 1 10` ; do mkdir $Y ; mv `head -n $(( Y * 50 )) X.list | tail -n 50` $Y ; done
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.