Linux - 使用覆盖将文件从源移动到目标

时间:2017-12-07 11:49:00

标签: linux administration

首先,如果我复制了已经存在的问题,我想道歉,但是这一点太重要了。

我的linux服务器上有两个目录:   - /tmp / tmp作为来源   - /var作为目的地

/var目录中已有500个txt文件,我想将所有文件从/tmp目录(约200个文件)移到/var目录,并替换那些已经存在但名称相同但不触及那些不在/tmp中的那些。

实际例子: /var个文件:a.txt,b.txt,c.txt,d.txt /tmp个文件:a.txt,b.txt 结果:/var个文件:a.txt(来自/tmp),b.txt(来自/tmp),c.txt,d.txt

不确定mv是否是一种正确的方法,所以提前谢谢你们! :)

2 个答案:

答案 0 :(得分:2)

这可以通过rsync

实施

有关详细信息,请参阅rsync manual

Local:  rsync [OPTION...] SRC... [DEST]
Access via remote shell:
  Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
  Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
        rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
  Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
        rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST

对于您的情况,

rsync -avzh /tmp/ /var/

如果你想测试它

rsync -avzh --dry-run /tmp/ /var/

-a, --archive               archive mode;
-v, --verbose               increase verbosity
-z, --compress              compress file data during the transfer
-h, --human-readable        output numbers in a human-readable format

详细评论

  

-v, - verbose此选项可增加传输过程中提供的信息量。默认情况下,rsync以静默方式工作。单身   -v将为您提供有关正在传输的文件的信息以及最后的简要摘要。两个-v选项会给你   有关哪些文件被跳过的信息以及更多信息   最后的信息。应该只使用两个以上的-v选项   如果你正在调试rsync。注意转移的名称   输出的文件使用默认的--out-format格式完成   lq%n%Lrq,它只告诉您文件的名称,以及项目的名称   是一个链接,它指向的地方。在单级-v级别的冗长,这个   没有提到文件何时更改其属性。如果你问   对于已更改属性的逐项列表(--itemize-changes   或者将lq%irq添加到--out-format设置),输出(在   客户端)增加以提及以任何方式更改的所有项目。   有关详细信息,请参阅--out-format选项。

     

-a, - archive这相当于-rlptgoD。这是一种快速的方式,说你想要递归,并希望保留几乎所有东西(用   -H是一个值得注意的遗漏)。上述等价的唯一例外是指定了--files-from,在这种情况下-r不是   默示。请注意,-a不保留硬链接,因为查找   多重链接文件很昂贵。您必须单独指定-H。   --no-OPTION您可以通过在选项名称前加上lqno-rq来关闭一个或多个隐含选项。并非所有选项都可以带有前缀   lqno-rq:只有其他选项隐含的选项(例如--no-D,   --no-perms)或在各种情况下有不同的默认值(例如--no-whole-file, - no-blocking-io, - no-dirs)。您可以在lqno-rq前缀后指定短选项名称或长选项名称(例如   --no-R与--no-relative相同。例如:如果你想使用-a(--archive)但不想要   -o( - 所有者),而不是将-a转换为-rlptgD,您可以指定-a --no-o(或-a --no-owner)。选项的顺序很重要:如果指定--no-r -a,则   -r选项最终会被打开,与-a --no-r相反。另请注意, - files-from选项的副作用不是   位置,因为它影响几个选项的默认状态和   略微改变-a的含义(参见--files-from选项)   更多细节)。

     

-z, - compress使用此选项,rsync会在发送到目标计算机时压缩文件数据,从而减少数据量   正在传播 - 这对于慢速连接很有用。   请注意,此选项通常可实现更好的压缩率   通过使用压缩远程shell或a来实现   压缩传输因为它利用了隐含的   未明确发送的匹配数据块中的信息   通过连接。

     

-h,--human-readable输出数字采用更易读的格式。这使得大数字输出使用更大的单位,具有K,M或G.   后缀。如果指定此选项一次,则这些单位为K(1000),M   (1000 * 1000),和G(1000 * 1000 * 1000);如果选项重复,则   单位是1024而不是1000的权力。

答案 1 :(得分:0)

您不能简单地使用mv命令合并两个目录。您可以使用以下任一方式:

1)您可以使用cprm命令来达到目的。

$ cp -r /var /tmp
$ rm -rf /var

2)使用rsync,你可以实现这一目标,但rsync并不是真正的"移动"根据你的问题。它宁可从一个位置复制到另一个位置(通常是远程位置)。

$ rsync -a -v /var /tmp
$ rm -r /var

我认为这应该达到目的。干杯!