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

chc*_*ist 54 cp

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

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

提前致谢

onu*_*gör 79

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

$ find . -maxdepth 1 -type f |head -1000|xargs cp -t "$destdir"
Run Code Online (Sandbox Code Playgroud)

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

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

find . -maxdepth 1 -type f -print0 | head -z -n 1000 | xargs -0 -r -- cp -t "$destdir" --
Run Code Online (Sandbox Code Playgroud)

  • 如果路径中有空格对我不起作用 (2认同)
  • @onurgüngör Marcus 是对的,如果你让 `find` 用 `-print0` 在一行上打印所有内容,`head` 就行不通,所以我认为你的最后一个例子不正确。想要合并该评论中发布的解决方法吗? (2认同)
  • @onurgüngör 我认为您需要更新您的版本。`man` 页面 [为 sid 列出](https://manpages.debian.org/unstable/coreutils/head.1.en.html) 确实包含了 `-z`。 (2认同)