使用 cp -u 但仅当内容不同时

使用 cp -u 但仅当内容不同时

如何使用cp -u仅在内容不同时进行复制,执行以下操作时会失败

$ cd /tmp/exper ; cp -v ~/Downloads/C/test.c . ; sudo chmod -R 777 . 
/home/budi/Downloads/C/test.c -> 'test.c'
$ cp -v -u test.c ~/Downloads/C
'test.c' -> '/home/budi/Downloads/C/test.c

因为内容是相同的,但是通过sudo chmod -R 777 .

如何正确地做到这一点?

答案1

cd /tmp/exper ; cp -v ~/Downloads/C/test.c .

cp -u根本不检查内容!

它检查最后修改日期。仅当源文件 ( ~/Downloads/C/test.c) 比目标文件 ( /tmp/exper/test.c) 新时,才会进行复制。

(顺便说一句,您显示的命令与您粘贴的输出不匹配。而且不清楚它sudo chmod -R 777 .在那里做什么。)

cp但这里没有任何问题:打印的事实sourcefile -> targetfile并不意味着该文件被复制了,只是被复制了考虑复制

答案2

正如 @MarcusMüller 所指出的,cp -u检查文件修改日期,而不是内容,并且仅在源比目标新或目标不存在时进行复制。

'A' -> 'foobar/A'当你这样做时你得到的事实\cp -uv A foobar/表明副本确实发生了。这是 Debian 系列系统上的正常行为,我怀疑在大多数其他 Linux 版本上(尽管 BSD 和 OSX 的行为可能有所不同)。那么为什么会得到这个结果呢?

只是因为当您这样做时\cp -uv A foobar/,新创建或复制的foobar/A内容比A.因此,当您决定进行反向复制操作时,即\cp -uv foobar/A .复制会非常正常地进行。

相关内容