我在 USB 驱动器上有两个目录结构,其中包含各种相同的文件,并且每个都有另一个没有的文件。
我想做的是将目录结构 B 移动到 A。合并后 B 的内容消失了。不能删除 A 中的目录,否则我将丢失 A 的内容。我认为 mv 命令不起作用,因为它会提示无法移动目录,因为同一位置的目标目录不为空。 mv B/* A/也不起作用,因为某些子目录也不会为空。 cp -a B/* A/不好(即使使用 -u),因为它会花费太长时间,因为文件在 USB 驱动器上,而且它们可能太多,导致驱动器容量不足。 rsync 也有同样的问题,因为它似乎没有移动/重命名功能,而且它只能通过复制文件来移动文件。
所以要么,我将不得不编写一个脚本,该脚本将递归地运行 B,并创建丢失的目录并将丢失的文件移动到 A。 但我希望有一个我不知道的命令、选项或实用程序。
最佳答案
我相信 cpio
具有您想要的功能。这个命令:
cd B
find . -type f -print0 | cpio -0dumpl A/.
将找到 B 中的所有文件,将它们传递给带有空终止符的 cpio
以正确处理奇数文件名,创建必要的目录(cpio -d
),保留所有权,权限和时间戳 (-m
),并尽可能无条件地 (-u
) 使用链接创建目标文件 (-l
)。
关于linux - 有效地合并慢速存储上具有大量内容的两个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24270794/