2012-01-06 58 views
1

我通過大量的「搜索字符串」目錄的搜索,然後每$文件運行腳本:KSH排序文件名

for file in `find $dir -name ${searchstring}'*'`; 
do 
    echo $file >> $debug 
    script.sh $file >> $output 
done 

我的$調試文件產生以下:

/root/0007_searchstring/out/filename_20120105_020000.log
/root/0006_searchstring/out/filename_20120105_010000.log
/root/0005_searchstring/out/filename_20120105_013000.log
(文件名是_yyyymmdd_hhmmss.log) ...

有沒有辦法讓找到的文件名或mktime訂購?我應該先找到排序嗎?製作一個數組然後根據這個question對它進行排序?

+0

'|排序-n'似乎是相當合理的,我 - 提供喲ur'sort'實現支持'-n' – fge 2012-01-06 11:19:40

回答

1

如果你想忽略的目錄路徑,只是使用的文件名,那麼你應該能夠使用:

for file in `find $dir -name ${searchstring}'*' | sort --field-separator=/ --key=4`; 
+0

+1謝謝,我不知道排序可以做到這一點。我最終使用'sort -t/-k 4' – 2012-01-09 02:17:29

1

'ls -t'如果您需要基於時間戳重新生成列表。

'sort -n'如果列表相當靜態?

+0

使用「ls -t」 – qbert220 2012-01-06 11:29:43

0

可以通過管道通過排序找到的輸出通過文件名排序:

find $dir -name "${searchstring}*" | sort | while read file 
do 
    echo "$file" >> $debug 
    script.sh "$file" >> $output  
done 
1

要通過修改時間進行排序,你可以使用統計與find:

 
$ find . -exec stat {} -c '%Y %n' \; | sort -n | cut -d ' ' -f 2