linux - 有效地合并慢速存储上具有大量内容的两个目录

标签 linux bash shell command-line sh

我在 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/

相关文章:

linux - 使用 UNIX/Linux 命令列出文件

linux - 如何告诉 mex 链接到/usr/lib 中的 libstdc++.so.6 而不是 MATLAB 目录中的那个?

mysql - Bash中循环遍历mysql的结果集

Linux 庆典。 for循环和函数,用于添加数字

linux - 我的案例脚本不应该区分大小写并且想要传递字符串

c++ - 使用 C++ 在 Linux 中设置系统和硬件时间

linux - 当我尝试传递 2 个变量时,Sed 未知选项 `s

json - 从命令行参数生成 JSON

regex - 当名称不包含某些单词时删除文件

linux - 如何在 bash 中拆分字符串