我有文件夹old
和new
。
我想将 中的所有内容替换old/*
为new/*
。这些文件夹中可以有许多子目录。
但是可能有一些文件不在new/*
但在old/*
,所以我希望它们保持原样。
我怎样才能从 Linux shell 中做到这一点?
答案1
rsync 可能是一个更好的选择。它很简单,只需 rsync -a subdir/ ./。请查看此unix.stackexchage 答案寻找更好的解决方案
-f
与cp
命令一起使用
cp -fR /source/files /dest
抑制 cp 覆盖”提示..
要覆盖 cp 的别名,您只需将其括在引号中:
'cp' -rf ./source/* /destination/
更多信息请点击以下链接:
http://www.wallpaperama.com/forums/cp-command-problems-forcing-overwrite-using-cp-command-t5685.html
http://bytes.com/topic/unix/answers/865372-force-cp-overwrite-existing-directory
答案2
使用rsync
。它将在一个方向上同步目录。因此,如果您想old
用 中的所有内容更新文件夹new
,但保留其中的内容,只需使用:
rsync -avh --dry-run /path/to/new/ /path/to/old/
在第一种情况下,这将仅输出将要传输的文件列表。在这种情况下:在 中找到的所有内容new
都将复制到old
,除非它已经存在。 中的所有内容old
保持原样。
如果您觉得没问题,请删除该--dry-run
参数以真正地传输它们。
这些-avh
标志仅启用存档模式(将保留时间戳等)、详细程度和人性化的文件大小。除非您指定该--delete
标志,否则不会从目标中删除任何内容。请咨询man rsync
以获取更多信息。
答案3
如果您想更改文件夹的名称,请尝试一次,没有命令可以重命名文件/文件夹,mv 命令用于将旧目录移动到新目录,因此重命名成功。
mkdir new sudo mv -fr 旧/* 新/