4

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

我有一个包含超过 100 万个文档的目录,我需要将这些文档分批处理到子文件夹中。我正在寻找一个简单的脚本来列出前 20,000 个左右,将它们移动到一个子文件夹,然后在接下来的 20,000 个上重复。我希望 ls 或 dir 可以选择仅列出一定数量的文件,但我似乎无法找到一种方法来做到这一点。

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

4

2 回答 2

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 结尾的文件

于 2011-06-23T17:40:57.157 回答
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 个条目(bananaorange),接下来tail -n 2会从之前的结果appleorange)中获取最后 2 个条目,而不是从原始文件中获取。

于 2011-06-23T17:54:58.123 回答