有没有办法限制使用ls或dir命令返回的文件名数?我在使用cygwin的Windows机器上,所以任何一个命令都可以。
我有一个包含超过100万个文档的目录,我需要将其分批到子文件夹中。我正在寻找一个简单的脚本,列出前20,000个左右,将它们移动到子文件夹,然后重复下一个20,000。我希望ls或dir可以选择只列出一定数量的文件,但我似乎找不到办法。
我的另一个选择是将文件名打印到文本文件并解析它以进行移动。似乎应该有一个更简单的解决方案。
答案 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)
或者您可能希望将head
和tail
结合起来从中间取出条目:
示例数据:
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 )并且不在原始文件之外。