ls或dir - 限制文件名返回的数量

时间:2011-06-23 17:39:12

标签: cygwin ls dir

有没有办法限制使用ls或dir命令返回的文件名数?我在使用cygwin的Windows机器上,所以任何一个命令都可以。

我有一个包含超过100万个文档的目录,我需要将其分批到子文件夹中。我正在寻找一个简单的脚本,列出前20,000个左右,将它们移动到子文件夹,然后重复下一个20,000。我希望ls或dir可以选择只列出一定数量的文件,但我似乎找不到办法。

我的另一个选择是将文件名打印到文本文件并解析它以进行移动。似乎应该有一个更简单的解决方案。

2 个答案:

答案 0 :(得分:7)

如果你正在使用cygwin,你应该可以使用head命令,如下所示:

ls | head -20000

列出前2万个。

如果要在1命令行中移动批处理,这样的事情应该有效:

ls | head -20000 | xargs -I {} mv {} subdir

(其中subdir是您要将文件移动到的子目录)。

首先运行此命令(使用echo命令)以验证它在运行实际移动之前是否有效:

ls | head -20000 | xargs -I {} echo mv {} subdir

请注意,因为你要将文件移动到子目录中,因为“ls”命令也可能会提取你的子目录。

如果它们都是txt文件,你可以这样做:

ls | grep txt$ | head -20000 | xargs -I {} mv {} subdir

获取以txt结尾的文件

答案 1 :(得分:2)

或者您可能希望将headtail结合起来从中间取出条目:

示例数据:

banana
cherry
apple
orange
plum
strawberry
redcurrant

现在让我们跳过2个条目并获取以下2个条目:

cat fruit.txt | head -n 4 | tail -n 2

那会给你:

apple
orange

因此head -n 4将返回前4个条目( banana orange ),以下tail -n 2将获得最后2个条目以前的结果 apple orange )并且不在原始文件之外。