如何从终端将文件从一定范围复制到另一个目录?

如何从终端将文件从一定范围复制到另一个目录?

我想将 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原因printxargs -0


您可以在不提供 glob 限定符的 shell 中通过使用外部程序来过滤列表来实现类似的方法 - 例如bash

printf '%s\0' ./* | sed -nz '50000,100000p' | xargs -r0 cp -t path/to/target/dir/

(尽管与该zsh版本不同,这并不限制匹配到普通文件 - 如果这是一个重要的区别,您可能可以使用扩展的 glob 来至少消除目录匹配)。

相关内容