如何将所有文件和子目录从一个文件夹移动到另一个文件夹? mv 命令不移动任何子目录

如何将所有文件和子目录从一个文件夹移动到另一个文件夹? mv 命令不移动任何子目录

我只想将所有文件和文件夹(包括任何子目录及其文件)移动并覆盖到另一个文件夹及其子文件夹。

我已尝试以下命令,但它们不适用于子目录及其文件。

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

相关内容