从linux中的目录中读取文件的顺序

问题描述:

如果在目录中,假设有100个文件,名称分别为file.pcap1,file.pcap2,file.pcap3,.....,file.pcap100。在一个shell脚本中,为了逐一读取这些文件,我写了如下一行:从linux中的目录中读取文件的顺序

for $file in /root/*pcap* 
do 
    Something 
done 

什么是读取文件的顺序?他们是按照文件名末尾数字的增加顺序读取的吗?这对所有类型的Linux机器都是一样的吗?

+3

请参阅http://superuser.com/questions/192280/does-bashs-match-files-in-alphanumeric-order – Mat 2012-08-08 19:01:02

它按文件名排序。就像默认的ls(没有标志)。

此外,你需要删除$在你的foreach:

for file in /root/*pcap* 
+0

我有890 t0 1200的文件。如果我做ls,1000到1200的文件已经出现首先,然后出现从890到999的文件。所以,我想我需要重命名890到0890,等等..直到999. – 2012-08-08 19:24:41

+0

如果我在别名ls = ls -lrth的bashrc文件中输入别名,然后运行该bashrc脚本,该怎么办?这些文件是否按正确的顺序阅读,然后我没有明确地重命名它们? – 2012-08-08 19:38:13

+1

@JustinCarrey我不是这方面的专家,但你可以尝试这样的事情:在'ls | sed -e's/\。pcap/.pcap/g'| sort -n -k2 | sed -e's/\。pcap/.pcap/g'' – 2012-08-08 19:50:49

POSIX shell returns paths sorted using current locale

如果模式的任何现有的文件名或路径名匹配, 图案应与文件名来代替和路径名根据当前语言环境中的有效排序顺序排序

这意味着pcap10在pcap2之前。您可能需要自然排序顺序,例如Python analog of natsort function (sort a list using a “natural order” algorithm)