【问题标题】:KSH sort filenamesKSH 对文件名进行排序
【发布时间】:2012-01-06 11:16:15
【问题描述】:

我在多个目录中搜索“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?

对其进行排序

【问题讨论】:

  • |sort -n 对我来说似乎很合理——前提是您的 sort 实现支持 -n

标签: unix sorting ksh sh


【解决方案1】:

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

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

【讨论】:

  • 谢谢,我不知道 sort 可以做到这一点。我最终使用了sort -t/ -k 4
【解决方案2】:

'ls -t' 如果需要根据时间戳重新生成列表。

'sort -n' 如果列表是相当静态的?

【讨论】:

    【解决方案3】:

    要按修改时间排序,可以使用 stat 和 find:

    $查找。 -exec stat {} -c '%Y %n' \; |排序-n |剪切-d''-f 2

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2017-03-04
        • 2012-04-01
        • 2020-08-05
        • 1970-01-01
        • 2013-05-29
        • 2011-07-12
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多