npm install clonefile [-g]
$> clonefile <source> <target> [options]
$> clonefile [--source] <source> [--target] <target1> <target2>...<targetN> [options]
$> clonefile --sources <pattern> <target1> <target2>...<targetN> [options]
via CJS
const {cloneFile} = require("clonefile");
// "Source" and "target" can be strings or arrays of strings
cloneFile(source, target, {silent: true, force: true})
or via ESM
import {cloneFile} from "clonefile";
cloneFile(source, target, {silent: true, force: true})
$> clonefile my-dir/ --list-only
π» β΄
[
"./docs/images/img_1.png",
"./docs/images/img_2.png",
"./docs/images/img_3.png",
"./docs/images/img_4.png",
...
]
$> clonefile license.txt license.md
or
$> clonefile --source license.txt --target license.md
NOTE: The source and the target arguments can be omitted
# Copy license.txt into my-dest-dir
$> clonefile license.txt my-dest-dir/
# Copy license.txt into my-file-target-1 (file), my-file-target-2 (file) and within (my-dest-dir-1/) (directory)
$> clonefile license.txt my-file-target-1 my-file-target-2 my-dest-dir-1/
$> clonefile --force sourcedir/ my-dest-dir-1/ my-dest-dir-2/ my-dest-dir-3/
Clone multiple files from a glob pattern to multiple directories with the --sources options (mandatory)
$> clonefile --force --sources *.txt my-dest-dir-1/ my-dest-dir-2/ my-dest-dir-3/
Result
C:/projects/clonefile/somefile1.txt => C:/projects/clonefile/my-dir-1/somefile1.txt C:/projects/clonefile/somefile1.txt => C:/projects/clonefile/my-dir-2/somefile1.txt C:/projects/clonefile/somefile1.txt => C:/projects/clonefile/my-dir-3/somefile1.txt
3 items cloned
C:/projects/clonefile/somefile2.txt => C:/projects/clonefile/my-dir-1/somefile2.txt C:/projects/clonefile/somefile2.txt => C:/projects/clonefile/my-dir-2/somefile2.txt C:/projects/clonefile/somefile2.txt => C:/projects/clonefile/my-dir-3/somefile2.txt
3 items cloned
C:/projects/clonefile/somefile3.txt => C:/projects/clonefile/my-dir-1/somefile3.txt C:/projects/clonefile/somefile3.txt => C:/projects/clonefile/my-dir-2/somefile3.txt C:/projects/clonefile/somefile3.txt => C:/projects/clonefile/my-dir-3/somefile3.txt
3 items cloned
NOTE: The --force option is required for cloning a directory
To help clonefile knows whether you want to copy a file to a directory or another file, always add a trailing slash "/" to folders.
$> clonefile --force --sources *.txt --sources ./sowehere/ --sources ../another-location/*.png my-dest-dir-1/ my-dest-dir-2/ my-dest-dir-3/
Clone multiple files and folders from multiple locations and files and folders from multiple glob patterns to multiple directories
$> clonefile --force --source my-file-1 --source path1/my-file-2 --source path1/my-dir/ --sources *.txt --sources /another-location/*.png my-dest-dir-1/ my-dest-dir-2/ my-dest-dir-3/
"my-file-1" and "path1/my-file-2" are regular files and will be copied to "my-dest-dir-1/", "my-dest-dir-2/", "my-dest-dir-3/"
"path1/my-dir/" is a directory that will be copied to "my-dest-dir-1/", "my-dest-dir-2/", "my-dest-dir-3/"
"*.txt" will copy all .txt in the current directory to "my-dest-dir-1/", "my-dest-dir-2/", "my-dest-dir-3/"
"/another-location/*.png" my-dest-dir-1/ will copy all .png in /another-location to "my-dest-dir-1/", "my-dest-dir-2/", "my-dest-dir-3/"
Options | default | Expect | Description |
---|---|---|---|
--silent | false | boolean | Whether to display messages |
--sources | "" | string | Glob Pattern to determine files to copy |
--source | "" | string | Regular file path for files or directories to copy |
--target | "" | string | Destination files or folders |
--recursive | false | boolean | create target directories if nonexistent |
--force | false | boolean | Allow cloning directories & Overwrite destination |
--progress | false | boolean | Display a progress bar during copy |
--clearProgress | false | boolean | Remove the progress bar when task complete |
--list | false | boolean | Print out the file list to copy |
--list-only | false | boolean | Only display the file list to copy in an array formatted for Js. No copy will be done |
--dry | false | boolean | Print out all operations, but without making any copies |
--no-limit | false | boolean | Ignore the limit set on copies (10000 by default). |
--hide-overwrite-error | false | boolean | Don't display error messages on overwrite. |
π package
β
ββ π index.cjs (2.1Kb)
ββ π index.mjs (2.3Kb)
β
ββββπ src
β β
β ββ π clonefile.cjs β½ CJS version - Node (25.1k unminified)
β ββ π clonefile.esm β½ ESM version - Node (25.7k unminified)
- Restore the --recursive option
- Add the option --hide-overwrite-error
- Allow copying with clonefile and clone functions
- Follow symlinks
- Generate code for ESM with to-esm
- Fix help command not working
- Replace the --force option with --no-limit to allow unlimited copies
- Increase the default limit for copying at once to 10000 (Use --no-limit to remove limitation)
- Copy with no limit when cloning programmatically and add a --no-limit option (cli) to enforce unlimited copies
- Add --list, --list-only and --dry options
- Add the option --clearProgress
- Add a --progress option to display a progress bar while copying
- Copy symlinks
- Fix --force option not working with cloneGlobs
- Review file limits processing (5000 instead of 200) (To increase or reduce that limit, create an environment variable called CLONE_FILE_MAX_PATTERN and pass the new limit)
- Increase limit files to copy from 200 to 5000
- Fix js error in cloneGlobs
- Use clone and cloneGlobs for programmatic copies
- Import the clone function to copy from code
- Add various fixes
- Deprecate the --recursive option with --force
- Allow selecting multiple sources with the --source option
- Do not stop at the first error
- Make --force option automatically be --recursive and --overwrite
- Allow cloning a directory
- Replace the --verbose option with --silent
- Fix cloning when options misplaced