我正在尝试对名为 NZParsed 的文件夹中的大量文件(数百万,即约 250 万).txt 文件进行排序。
文件夹中的所有文件的命名方式为 1.txt、2.txt 等等,直到 25xxxxx.txt
在 eclipse 中运行以下命令后:
os.system("sort -k1,1 -k3,3n -k4,4n -y 1048576 /home/viraj/NZ/NZParsed/* -o /home/viraj/NZ/SplitIndex/abcd.txt")
我收到一个错误:
sh: 1: sort: Argument list too long
有人能告诉我任何其他方法可以将所有这些文件排序为 1 个文件并使用 eclipse 中的以下命令将它们拆分吗:
os.system("split -C 200m /home/viraj/NZ/SplitIndex/abcd.txt /home/viraj/NZ/SplitIndex/")
答案1
该问题与 eclipse 或 python 无关。您已达到 ARG_MAX 限制,有关更多详细信息,请参阅这里但简而言之,这是命令参数列表的字节数的限制。
因此,为了避免这种情况,您需要sort
采用不列出文件的方式。例如:
for i in /home/viraj/NZ/NZParsed/*; do cat "$i" ; done |
sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt
上述命令将检查cat
每个文件,然后将所有文件的内容通过您的sort
命令传递。这样,文件就不会被列出,您也不会遇到问题ARG_MAX
。
另一种方法是使用 find 的-exec
选项:
find /home/viraj/NZ/NZParsed/ -type f -name '[0-9]*.txt' -exec cat {} + |
sort -k1,1 -k3,3n -k4,4n -y 1048576 > /home/viraj/NZ/SplitIndex/abcd.txt