Skip to content

Latest commit

Β 

History

History
362 lines (235 loc) Β· 9.12 KB

README.md

File metadata and controls

362 lines (235 loc) Β· 9.12 KB

Test workflow nycrc Coverage npm version

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

--progress option example



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:
  • 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