KSH排序文件名

时间:2012-01-06 11:16:15

标签: unix sorting ksh sh

我正在搜索“searchstring”的多个目录,然后在每个$ file上运行脚本:

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

我的$ debug文件产生以下内容:

  

/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进行排序?

4 个答案:

答案 0 :(得分:1)

如果您需要根据时间戳重新生成列表,请

'ls -t'。

如果列表是相当静态的话,

'sort -n'?

答案 1 :(得分:1)

如果您想忽略目录路径并只使用文件名,那么您应该可以使用:

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

答案 2 :(得分:1)

要按修改时间排序,您可以将stat与find:

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

答案 3 :(得分:0)

您可以通过sort管道输出find以按文件名排序:

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