clonefile
v3.8.3
Published
Clone file into multiple locations
Downloads
54
Readme
Installation
npm install clonefile [-g]
Usage
In a Terminal
$> clonefile <source> <target> [options]
$> clonefile [--source] <source> [--target] <target1> <target2>...<targetN> [options]
$> clonefile --sources <pattern> <target1> <target2>...<targetN> [options]
Programmatically
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})
Examples
Display file list in a directory without doing any copies
$> 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",
...
]
Clone a file
$> clonefile license.txt license.md
or
$> clonefile --source license.txt --target license.md
NOTE: The source and the target arguments can be omitted
Clone a file into directory
# Copy license.txt into my-dest-dir
$> clonefile license.txt my-dest-dir/
Clone a file to multiple locations
# 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/
Clone a directory in multiple directories
$> 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
Notes
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.
Clone files using multiple glob patterns to multiple directories
$> 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
| 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. |
--progress
Package
📁 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)
Changelog
current:
- Fix --recursive option ignored when invoked programmatically
3.8.2:
- Restore the --recursive option
3.8.0:
- Add the option --hide-overwrite-error
3.7.2:
- Allow copying with clonefile and clone functions
3.7.0:
- Follow symlinks
3.6.0:
- Generate code for ESM with to-esm
- Fix help command not working
3.5.0:
- 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
3.4.0:
- Add the option --clearProgress
3.3.0:
- Add a --progress option to display a progress bar while copying
3.2.6:
- Copy symlinks
3.2.5:
- Fix --force option not working with cloneGlobs
3.2.4:
- 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)
3.2.3:
- Increase limit files to copy from 200 to 5000
- Fix js error in cloneGlobs
3.2.1:
- Use clone and cloneGlobs for programmatic copies
3.2.0:
- Import the clone function to copy from code
3.1.0:
- Add various fixes
- Deprecate the --recursive option with --force
- Allow selecting multiple sources with the --source option
2.1.1:
- Do not stop at the first error
1.1.3:
- Make --force option automatically be --recursive and --overwrite
1.1.0:
- Allow cloning a directory
- Replace the --verbose option with --silent
- Fix cloning when options misplaced