【发布时间】:2020-05-18 13:58:46
【问题描述】:
我正在尝试通过保留文件夹结构的掩码复制文件(使用--parents),由于argument list too long 错误,我不能直接使用cp -r --parents 或rsync。
ls folder1/folder2/ | head | xargs -I {} cp -r --parents folder1/folder2/{}/neutral* neutral_data/
但似乎星号符号在此处无法按预期工作,而是出现一些错误,例如:
cp: cannot stat 'folder1/folder2/folder3/neutral*': No such file or directory
在这种情况下使用星号符号的正确方法是什么,或者解决这个问题的任何其他方法是什么?
更新:
基于这个答案https://unix.stackexchange.com/a/5247/221416我试过了
ls folder1/folder2/ | head | xargs -I {} sh -c cp -r --parents folder1/folder2/{}/neutral* neutral_data/
但它给出了错误:
cp: missing file operand
【问题讨论】:
-
使用
rsync代替ls、xargs、cp。 -
我不能直接使用
cp -r --parents或rsync,因为argument list too long错误。 -
使用
ls几乎总是一个糟糕的策略,因为文件/文件夹名称中有空格和其他特殊字符等。使用rsync应该没有问题。你的标准到底是什么?应该包含或排除哪些文件/文件夹?您想在目标中复制多少源目录结构(整个源路径,或仅它的最后一部分)?您可以使用--relative和 rsync 来确定需要保留源路径的确切部分。