Chris
Chris

Reputation: 1697

loop to move files not working

I am having one of these mornings where nothing goes to plan. I need to move files to a target directory by chunks of 1,000 at time

I wanted to loop thru my files like so

for i in `find . -name '*XML'`
   for((b=0; b<1000; b++))
   do
   mv $i targetdirect/
   done
done

But I get a "-bash: syntax error near unexpected token `done:" error.

What I am missing??

Upvotes: 0

Views: 148

Answers (2)

tripleee
tripleee

Reputation: 189417

The second for loop is a syntax error. Also you should double-quote "$i".

What do you mean by moving 1000 files at a time? Something like this perhaps?

find . -name '*.XML' -print0 | xargs -r0 -n 1000 mv -t targetdirect

The -print0 and corresponding xargs -0 are a GNU extension to handle arbitrary file names. This works because the null character is an invalid character in file names on Unix; hence, it is safe to use as a delimiter between file names. For regularly named files (no quotes, no newlines etc in the file names) this may seem paranoid, but it is well-documented practice and a FAQ.

Upvotes: 3

William Pursell
William Pursell

Reputation: 212248

Your first for loop has no corresponding do (You have two done, but only one do.)

Upvotes: 0

Related Questions