我有一个包含数千个文件的目录。我需要将该目录中的所有文件复制到另一个目录。
我用过:
cp -r dir1/* dir2/
但是我得到的错误参数太长了,但它适用于文件数量较少的目录。
答案 0 :(得分:0)
如果dir2不再存在,那么一个简单的解决方案可能是:
cp -r dir1 dir2
...确保在执行命令之前dir2不存在。
答案 1 :(得分:0)
此处存在类似问题:Error Argument too long,这可以解决您的问题。
你应该研究xargs。这将多次运行一个命令,并且可以一次传递尽可能多的参数。
解决方案基本上归结为:
在Linux上:
ls dir1 | xargs -I {} cp {} dir2/
在OS X上:
ls dir1 | xargs -J {} cp {} dir2/
这列出了dir1中的所有文件,然后使用xargs来捕获ls输出的行。然后复制每个文件。 (在本地成功测试过)
如果您对为什么有限制David在您的问题(link here for UNIX cp limit)下发布了一个链接感到好奇。
您可以通过以下方式找到系统限制:
getconf ARG_MAX
如果您目录中的文件超过ARG_MAX的值,则会生成您的错误。
David提到的链接非常详细地解释了这一点,非常值得一读。总结是传统上Unix的限制(由getconf ARG_MAX报告)或多或少地取决于累积大小: