Possible Duplicate:
How to move 100 files from a folder containing thousands?
Is it possible to copy only the first 1000 files from a directory to another?
Thanks in advance
Possible Duplicate:
How to move 100 files from a folder containing thousands?
Is it possible to copy only the first 1000 files from a directory to another?
Thanks in advance
The following copies the first 1000 files found in the current directory to $destdir. Though the actual files depend on the output returned by find.
$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"
You'll need the GNU implementation of cp for -t, a GNU-compatible find for -maxdepth. Also note that it assumes that file paths don't contain blanks, newline, quotes or backslashes (or invalid characters or are longer than 255 bytes with some xargs implementations).
EDIT: To handle file names with spaces, newlines, quotes etc, you may want to use null-terminated lines (assuming a version of head that has the -z option):
find . -maxdepth 1 -type f -print0 | head -z -n 1000 | xargs -0 -r -- cp -t "$destdir" --
A pure shell solution (which calls cp several times).
N=1000;
for i in "${srcdir}"/*; do
[ "$((N--))" = 0 ] && break
cp -t "${dstdir}" -- "$i"
done
This copies a maximum number of $N files from $srcdir to $dstdir. Files starting with a dot are omitted. (And as far as I know there's no guaranty that the set of chosen files would even be deterministic.)
The following scary 1-liner:
perl -MFile::Copy -e 'opendir(DIR,$ARGV[0]);$n=1000; (-f $_) && copy($_,"$ARGV[1]/$_") while($n-- && readdir(DIR))
works for file containing spaces, quotes, etc., which tend to break shell-based solutions (short of $IFS contortions). 'Course if your file names are behaved, shell is fine.
Edit: added check for copying only files.