Terminal Command Line – How to Copy the First N Files from One Directory to Another

bashcommand linecopy/pasteterminal

Im looking to copy the first 'n' files from one directory to another directory preferably with only cli tools (no scripts).

I've tried the following:

  • find . -maxdepth 1 -type f | head -5 | xargs cp -t /target/directory

    This looked promising, but failed because osx cp command doesn't appear to have the
    -t switch

  • exec in a few different configurations

    This probably failed for syntax problems on my end : /
    I couldn't seem to get a head type selection working

Any help or suggestions would be appreciated.

Thanks in advance!

Best Answer

You need the -J option with xargs.

find . -maxdepth 1 -type f | head -n5 | xargs -J X cp X /target/directory

The J option places all the filenames into the placeholder X, which can be any character(s) and cp accepts multiple files to a target directory. It can be visualized as-

cp file1 file2 file3 file4 file5 DESTINATION

EDIT:

To handle filenames with spaces, we have tr translate the newline character to the null character after each filename and then have xargs handle the null bit as a separator for the filenames.

 find . -maxdepth 1 -type f | head -n5 | tr '\n' '\0' | xargs -0 -J X cp -- X /target/directory