我在USB驱动器上有两个目录结构,它们具有相同的各种文件,每个目录结构都有另一个没有的文件。
我想要做的是将目录结构B移到A.可以在合并后B的内容消失。 A中的目录不得删除,否则我将失去A的内容。我认为mv命令不会工作,因为它会抱怨它不能移动目录,因为同一个地方的目标目录不是空的。 mv B / * A / won工作要么是因为某个子目录也不是空的。 cp -a B / * A /是坏的(即使用-u),因为它会花费太长时间,因为文件在USB驱动器上,并且可能有太多,导致驱动器耗尽容量。 rsync有同样的问题,因为它似乎没有移动/重命名功能,它只能通过复制它们来移动文件。
所以要么,我要编写一个递归运行B的脚本,并创建丢失的目录并将丢失的文件移动到A. 但我希望有一个我不了解的命令或选项或实用程序。
答案 0 :(得分:2)
我相信cpio
具备您想要的功能。这个命令:
cd B
find . -type f -print0 | cpio -0dumpl A/.
将找到B中的所有文件,将它们传递给cpio
,并使用空终止来正确处理奇数文件名,创建必要的目录(cpio -d
),保留所有权,权限和时间戳({{1} }),并使用链接尽可能无条件地创建目标文件(-m
)(-l
)。