【问题标题】:find files that have number in file name greater than查找文件名中数字大于的文件
【发布时间】:2015-05-30 14:04:53
【问题描述】:

如果我有 10 个名为 01-a.txt、02-a.txt、...10-a.txt 的文件 - 如何找到数量大于 5 的文件?我想要一个通用的解决方案,我会使用类似的东西将所有文件的内容放入一个文件中

cat *.txt > bigfile.txt

我可以使用数字获取文件

ls *[0-9]*

但似乎无法超越。

谢谢。

【问题讨论】:

    标签: linux file ls


    【解决方案1】:

    您可以为此使用seq,但仅当所有文件具有相同的命名约定时才有效:

    seq -f "%02g-a.txt" 6 10
    06-a.txt
    07-a.txt
    08-a.txt
    09-a.txt
    10-a.txt
    

    即:

    cat `seq -f "%02g-a.txt" 6 10` > bigfile.txt
    

    【讨论】:

    • 是的,这对我有用——我得到了正确的文件——但是结合 cat 给我 cat: seq -f "%02g.txt" 6 10: No such file or directory
    • 请显示完整的命令——您似乎使用了不正确的引号。您需要将 seq ... 部分放入重音符号中(它在 SO 上用于代码格式化)。您也可以使用 bash $(...) 语法,即:cat $(seq -f "%02g-a.txt" 6 10) > bigfile.txt
    【解决方案2】:

    假设文件夹只包含这些文件。

    这将列出编号大于 5 的所有文件

    ls [0-9]* | awk -F '-' '{if ($1 > 5) print $0}'

    【讨论】:

    • 优雅,我喜欢那个。如果有人需要按 IP 地址对某些内容进行排序,则可以使用相同的方法。喜欢 IP 大于 10.10.125.x(从 10.10.126.0 开始):ls -1v 10.10.[0-9]* | awk -F '.' '{if ($3 > 125) print $0}'
    【解决方案3】:

    它将 cat 所有名为“-”并且此 大于 $LIM 的文件。

    即使它们是用一个数字(如5)、两个数字(如05)或更多......

    即使文件之间的 不同。

    LIM=5
    for file in $(ls);
    do
       number=$(echo $file | cut -f1 -d'-');
       [ $number -gt $LIM ] && cat $file >> bigfile.txt;
    done
    

    【讨论】:

      【解决方案4】:
      ls *.txt | perl -n -e '$f = $_; $f =~ s/\D//g; $f > 5 and print'
      

      【讨论】:

        猜你喜欢
        • 2018-11-14
        • 2016-11-30
        • 1970-01-01
        • 2011-12-15
        • 2016-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多