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

发布于 2024-11-16 15:43:56 字数 280 浏览 5 评论 0原文

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

我有一个包含超过 100 万个文档的目录,我需要将其批量放入子文件夹中。我正在编写一个简单的脚本,列出前 20,000 个左右,将它们移动到子文件夹中,然后重复接下来的 20,000 个。我希望 ls 或 dir 能够选择仅列出一定数量的文件,但我似乎找不到办法来做到这一点。

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

Is there a way to limit the number of filenames to be returned using the ls or dir command? I'm on a windows machine with cygwin, so either command will do.

I have a directory with over 1 million docs that I need to batch out into subfolders. I'm looking to write a simple script that would list the first 20,000 or so, move them to a subfolder, then repeat on the next 20,000. I would expect ls or dir to have an option to list only a certain number of files, but I can't seem to find a way to do it.

My other option is to print the filenames out to a text file and parse that to make the moves. It seems like there should be a simpler solution though.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

送舟行 2024-11-23 15:43:56

如果您使用 cygwin,您应该能够使用 head 命令,如下所示:

ls | head -20000

列出前 20,000 个。

如果您想在 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结尾的文件

If you are using cygwin, you should be able to use the head command, like this:

ls | head -20000

to list the first 20 thousand.

If you want to move the batch in 1 command line, something like this should work:

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

(where subdir is the subdir you want to move the files to).

Run this first (with the echo command) to verify it will work before running the actual move:

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

Just be careful though, since you are moving files into a subdir, because the "ls" command will probably pick up your subdirs as well.

If they are all txt files, you could do something like this:

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

to get files that end in txt

走过海棠暮 2024-11-23 15:43:56

或者您可能想要组合 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 将得到最后 2 个之前的结果苹果橙色)并且不在原始文件中。

Or you might want to combine head and tail to fetch entries out of the middle:

Example data:

banana
cherry
apple
orange
plum
strawberry
redcurrant

Now let's skip 2 entries and fetch the following 2 ones:

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

That will give you:

apple
orange

So head -n 4 will return the first 4 entries (banana to orange) and the following tail -n 2 will get the last 2 ones out of that previous result (apple to orange) and not out of the original file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文