我正在使用 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/dest
mv -T /tmp/source /tmp/dest
/tmp/source
/tmp/dest
请注意,如果不为空,mv -T source dest
则会失败。dest
要将 的内容替换bar
为foo
示例中的内容,请使用
rm -rf bar
cp -r foo bar
或者,
rsync --archive --delete foo/ bar