我想将表单中的文件列表复制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/