如果在目錄中,假設有100個文件,名稱分別爲file.pcap1,file.pcap2,file.pcap3,.....,file.pcap100。在一個shell腳本中,爲了逐一讀取這些文件,我寫了如下一行:從linux中的目錄中讀取文件的順序
for $file in /root/*pcap*
do
Something
done
什麼是讀取文件的順序?他們是按照文件名末尾數字的增加順序讀取的嗎?這對所有類型的Linux機器都是一樣的嗎?
如果在目錄中,假設有100個文件,名稱分別爲file.pcap1,file.pcap2,file.pcap3,.....,file.pcap100。在一個shell腳本中,爲了逐一讀取這些文件,我寫了如下一行:從linux中的目錄中讀取文件的順序
for $file in /root/*pcap*
do
Something
done
什麼是讀取文件的順序?他們是按照文件名末尾數字的增加順序讀取的嗎?這對所有類型的Linux機器都是一樣的嗎?
它按文件名排序。就像默認的ls
(沒有標誌)。
此外,你需要刪除$
在你的foreach:
for file in /root/*pcap*
我有890 t0 1200的文件。如果我做ls,1000到1200的文件已經出現首先,然後出現從890到999的文件。所以,我想我需要重命名890到0890,等等..直到999. – 2012-08-08 19:24:41
如果我在別名ls = ls -lrth的bashrc文件中輸入別名,然後運行該bashrc腳本,該怎麼辦?這些文件是否按正確的順序閱讀,然後我沒有明確地重命名它們? – 2012-08-08 19:38:13
@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)。
請參閱http://superuser.com/questions/192280/does-bashs-match-files-in-alphanumeric-order – Mat 2012-08-08 19:01:02