将前 n 个文件复制到不同的目录中

将前 n 个文件复制到不同的目录中

可能的重复:
如何从包含数千个文件的文件夹中移动 100 个文件?

是否可以仅将前 1000 个文件从一个目录复制到另一个目录?

提前致谢

答案1

以下将当前目录中找到的前 1000 个文件复制到$destdir.尽管实际文件取决于find.

$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"

cp您将需要for的 GNU 实现-t,即与 GNU 兼容的findfor -maxdepth。另请注意,它假设文件路径不包含空格、换行符、引号或反斜杠(或无效字符或在某些xargs实现中长度超过 255 个字节)。

编辑:要处理带有空格、换行符、引号等的文件名,您可能需要使用以 null 结尾的行(假设该版本head具有该-z选项):

find . -maxdepth 1 -type f -print0 | head -z -n 1000 | xargs -0 -r -- cp -t "$destdir" --

答案2

纯 shell 解决方案(调用cp多次)。

N=1000;
for i in "${srcdir}"/*; do
  [ "$((N--))" = 0 ] && break
  cp -t "${dstdir}" -- "$i"
done

这会将最大数量的$N文件从$srcdir复制到$dstdir。以点开头的文件将被省略。 (据我所知,无法保证所选文件集是确定性的。)

答案3

下面是可怕的一行:

perl -MFile::Copy -e 'opendir(DIR,$ARGV[0]);$n=1000; (-f $_) && copy($_,"$ARGV[1]/$_") while($n-- && readdir(DIR)) 

适用于包含空格、引号等的文件,这些文件往往会破坏基于 shell 的解决方案(缺少 $IFS 扭曲)。当然,如果你的文件名正常,shell 就没有问题。

编辑:添加了仅复制文件的检查。

相关内容