我想将 50,000 到 100,000 个文件复制到一个单独的目录中,但我不确定如何执行此操作。
为了获得更多背景信息,我想从较大的数据集(900,000)中创建一个较小的数据集(50,000)。我知道前 50,000 张和后 50,000 张图像都是黑色的,我不想在小数据集中看到这些图像。
答案1
我还没有尝试过处理如此大量的文件,但我建议执行以下操作zsh
:
print -N ./*(.[50000,100000]) | xargs -r0 cp -t path/to/target/dir/
./*(.)
是一个合格的 glob,评估当前目录中的纯文本文件列表,按您的语言环境确定的词汇顺序排序;[m,n]
从该列表中选择一个范围。使用适合传递给的空分隔符的-N
原因print
xargs -0
您可以在不提供 glob 限定符的 shell 中通过使用外部程序来过滤列表来实现类似的方法 - 例如bash
:
printf '%s\0' ./* | sed -nz '50000,100000p' | xargs -r0 cp -t path/to/target/dir/
(尽管与该zsh
版本不同,这并不限制匹配到普通文件 - 如果这是一个重要的区别,您可能可以使用扩展的 glob 来至少消除目录匹配)。