cp -Tr 覆盖行为

cp -Tr 覆盖行为

我正在使用 GNU coreutils

foo我有一个包含文件的目录file1和一个bar包含file2.

如果我现在执行 a cp -rT foo bar,则 bar 将包含这两个文件,而不是像手册页可能会让您相信的那样被覆盖。

我希望“bar”仅包含“foo”的内容而不被合并。

答案1

对于GNU cp,该-T选项用于确保源目录不会被放入里面目标目录。它不会导致目标目录的内容被删除。

关于此 ( ) 的信息文档info '(coreutils)Target directory'说(它用作mv示例):

-T

--no-target-directory

当最后一个操作数是目录或目录的符号链接时,不要特殊对待。这有助于避免在共享区域中运行的程序中出现竞争情况。例如,当命令mv /tmp/source /tmp/dest成功时,不能保证被/tmp/source重命名为:如果将其他进程创建为目录,则/tmp/dest它可能已重命名为。不过,如果成功的话,就不存在改名的问题了。/tmp/dest/source/tmp/destmv -T /tmp/source /tmp/dest/tmp/source/tmp/dest

请注意,如果不为空,mv -T source dest则会失败。dest


要将 的内容替换barfoo示例中的内容,请使用

rm -rf bar
cp -r foo bar

或者,

rsync --archive --delete foo/ bar

相关内容