Copy first n files in a different directory
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.)