我只想将所有文件和文件夹(包括任何子目录及其文件)移动并覆盖到另一个文件夹及其子文件夹。
我已尝试以下命令,但它们不适用于子目录及其文件。
mv -f fromA/* toB/
mv -f fromA/{,.}* toB/
因此,文件夹 A 中的所有文件都将移动到文件夹 B,但不会从 A/sub 移动到 B/sub。
我收到错误无法将“fromA/subA”移动到“toB/subB”:文件存在
如果我逐一查看每个文件夹,它会起作用,但我确信我遗漏了一些东西。我已经看到了大多数(如果不是全部)相关答案,但它们都不起作用。
答案1
info mv
有这个:
_Note_: 'mv' will only replace empty directories in the destination.
Conflicting populated directories are skipped with a diagnostic.
看来没有办法推翻这一点。要么删除 B 并重命名 A(重新命名为 B),要么先手动清空/删除 B 中的目录。
答案2
我建议使用rsync
使用 rsync,您可以指定要删除的文件,甚至可以进行“试运行”以查看实际运行时会发生什么。
尝试
rsync -av --dry-run --delete-before fromA toB
--delete-before 非常适合在空间不足的系统上合并文件。如果您对试运行感到满意,请删除该--dry-run
选项。
我建议您查看手册页以查看所有不同的“删除”选项,以便您可以确定哪个最适合您。
如果您想删除目标中与移动无关的所有文件,可以使用该--delete-excluded
选项。再次,--dry-run
在运行之前检查将删除的内容。
有一个--remove-source-files
会在传输过程中删除源文件(就像 mv 一样),但它不会删除目录。所以你仍然需要删除源目录rm
答案3
根据您的陈述,您收到文件已存在的错误,您在“toB”下已有文件夹和文件吗?如果您主要是将文件从“fromA”合并到“toB”,那么您最好递归地复制文件(cp -ar),然后删除“fromA”。
否则,如果“toB”最初应该为空,而您只想确保“toB”的内容与“fromA”相同:
$ rm -rf toB
$ mv fromA toB