将 test/path/to/files 列表复制到 prod/path/to/files 列表

将 test/path/to/files 列表复制到 prod/path/to/files 列表

我想将表单中的文件列表复制test/path/to/file/filename.xyz到其相应的生产路径prod/path/to/file/filename.xyz。如果测试路径和生产路径相同,只是“prod”而不是“test”,我可以使用以下命令吗?这会覆盖目标文件吗?

$ xargs -I % --arg-file=input.txt cp  /test/%  /prod/%

答案1

我不太明白你对的用法xargs,特别是的含义%

但是cp,是的,它会覆盖目标文件。但是,cp有几种方法可以解决这个问题:

  • -b--backup[=CONTROL]:备份每个现有的目标文件
  • -i--interactive:覆盖前提示(覆盖先前的 -n 选项)
  • -n--no-clobber:不覆盖现有文件
  • -u--update:仅当源文件比目标文件新或目标文件丢失时才复制

请参阅man cp更多内容。

至于您的最终目标,我认为您的意思是将文件中列出的“test/”下的一些文件复制input.txt到“prod/”下的相同路径中。为此,它似乎rsync更适合。它有很多选择。其中一些可能相关:

-b, --backup            make backups (see --suffix & --backup-dir)
--backup-dir=DIR        make backups into hierarchy based in DIR
--suffix=SUFFIX         backup suffix (default ~ w/o --backup-dir)
--files-from=FILE       read list of source-file names from FILE
-R, --relative`         use relative path names
-u, --update            skip files that are newer on the receiver
-n, --dry-run           perform a trial run with no changes made
[etc]

答案2

使用--files-from=选项rsync允许您指定要传输的确切文件列表:

$ rsync -av --ignore-existing \
  --files-from=input.txt test/ prod/

相关内容