Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 用少于n个文件回显ls命令的输出_Linux_Bash - Fatal编程技术网

Linux 用少于n个文件回显ls命令的输出

Linux 用少于n个文件回显ls命令的输出,linux,bash,Linux,Bash,我有400个文件夹,里面有几个文件,我感兴趣的是: 计算每个文件夹中有多少扩展名为.solution的文件,以及 然后只输出少于440个元素的文件夹 点1)很容易通过命令获得: for folder in $(ls -d */ | grep "sol_cv_"); do a=$(ls -1 "$folder"/*.solution | wc -l); echo $folder has "${a}" files; done 但是有没有简单的方法只过滤元素少于440的文件?这个简

我有400个文件夹,里面有几个文件,我感兴趣的是:

  • 计算每个文件夹中有多少扩展名为
    .solution
    的文件,以及
  • 然后只输出少于440个元素的文件夹
  • 点1)很容易通过命令获得:

    for folder in $(ls -d */ | grep "sol_cv_");
    do
        a=$(ls -1 "$folder"/*.solution | wc -l); 
        echo $folder has "${a}" files;
    done
    

    但是有没有简单的方法只过滤元素少于440的文件?

    这个简单的脚本可以为您工作:-

     #!/bin/bash
    
     MAX=440
    
     for folder in sol_cv_*; do
         COUNT=$(find "$folder" -type f -name "*.solution" | wc -l)
         ((COUNT < MAX)) && echo "$folder"
     done
    
    #/bin/bash
    最大值=440
    用于sol_cv_u*中的文件夹;做
    计数=$(查找“$文件夹”-键入f-name“*.solution”| wc-l)
    ((计数<最大值))&回显“$文件夹”
    完成
    
    此简单脚本适用于您:-

     #!/bin/bash
    
     MAX=440
    
     for folder in sol_cv_*; do
         COUNT=$(find "$folder" -type f -name "*.solution" | wc -l)
         ((COUNT < MAX)) && echo "$folder"
     done
    
    #/bin/bash
    最大值=440
    用于sol_cv_u*中的文件夹;做
    计数=$(查找“$文件夹”-键入f-name“*.solution”| wc-l)
    ((计数<最大值))&回显“$文件夹”
    完成
    
    下面的脚本

    counterfun(){
    count=$(find "$1" -maxdepth 1 -type f -iname "*.solution" | wc -l)
    (( count < 440 )) && echo "$1"
    }
    export -f counterfun
    find /YOUR/BASE/FOLDER/ -maxdepth 1 -type d -iname "sol_cv_*" -exec bash -c 'counterfun "$1"' _ {} \;
    #maxdepth 1 in both find above as you've confirmed no sub-folders
    
    counterfun(){
    计数=$(查找“$1”-最大深度1-类型f-iname”*.solution“| wc-l)
    ((计数<440))&回显“$1”
    }
    出口-f反存根
    查找/YOUR/BASE/FOLDER/-maxdepth 1-typed-iname“sol_cv_*”-exec bash-c'counterfun“$1”{}\;
    #两个文件夹中的maxdepth 1都可以在上面找到,因为您已确认没有子文件夹
    
    应该这样做

    下面的脚本

    counterfun(){
    count=$(find "$1" -maxdepth 1 -type f -iname "*.solution" | wc -l)
    (( count < 440 )) && echo "$1"
    }
    export -f counterfun
    find /YOUR/BASE/FOLDER/ -maxdepth 1 -type d -iname "sol_cv_*" -exec bash -c 'counterfun "$1"' _ {} \;
    #maxdepth 1 in both find above as you've confirmed no sub-folders
    
    counterfun(){
    计数=$(查找“$1”-最大深度1-类型f-iname”*.solution“| wc-l)
    ((计数<440))&回显“$1”
    }
    出口-f反存根
    查找/YOUR/BASE/FOLDER/-maxdepth 1-typed-iname“sol_cv_*”-exec bash-c'counterfun“$1”{}\;
    #两个文件夹中的maxdepth 1都可以在上面找到,因为您已确认没有子文件夹
    

    应该这样做

    避免解析
    ls
    命令,并使用
    printf'%q\n
    对文件进行计数:

    for folder in *sol_cv_*/; do
        # if there are less than 440 elements then skip
        (( $(printf '%q\n' "$folder"/* | wc -l) < 440 )) && continue
        # otherwise print the count using safer printf '%q\n'
        echo "$folder has $(printf '%q\n' "$folder"*.solution | wc -l) files"
    done
    
    用于*sol_cv_*/中的文件夹;做
    #如果少于440个元素,则跳过
    ($(printf'%q\n''$文件夹”/*| wc-l)<440))&继续(&C)
    #否则,请使用更安全的printf“%q”打印计数\n
    echo“$文件夹有$(printf'%q\n'$文件夹”*.solution | wc-l)文件”
    完成
    
    避免解析
    ls
    命令,并使用
    printf'%q\n
    对文件进行计数:

    for folder in *sol_cv_*/; do
        # if there are less than 440 elements then skip
        (( $(printf '%q\n' "$folder"/* | wc -l) < 440 )) && continue
        # otherwise print the count using safer printf '%q\n'
        echo "$folder has $(printf '%q\n' "$folder"*.solution | wc -l) files"
    done
    
    用于*sol_cv_*/中的文件夹;做
    #如果少于440个元素,则跳过
    ($(printf'%q\n''$文件夹”/*| wc-l)<440))&继续(&C)
    #否则,请使用更安全的printf“%q”打印计数\n
    echo“$文件夹有$(printf'%q\n'$文件夹”*.solution | wc-l)文件”
    完成
    

    文件正上方的文件夹?是的,没有子文件夹,每个文件夹都有一堆txt文件,但我只对那些带有
    *的文件感兴趣。解决方案
    extension@user2380782:你能用
    400个文件夹的基本文件夹更新问题吗
    我的基本文件夹是/home/jfertaj文件正上方的文件夹?是的,没有子文件夹,每个文件夹都有一堆txt文件,但我只对那些带有
    *的文件感兴趣。解决方案
    extension@user2380782:你能用
    400个文件夹的基本文件夹更新问题吗
    我的基本文件夹是/home/jfertaj你的命令没有给我输出,至少有10个文件夹少于440个
    *。解决方案
    文件这是一个输出示例:
    sol_cv_212/:2 sol_cv_213/:2 sol_cv_214/:2 sol_cv_215/:2 sol_cv_216/:2 sol_cv_217/:2
    谢谢@anubhava,但现在我们缺少元素少于440的文件列表……啊,是的,现在添加回来了。现在试试。对不起,我正忙着做其他事情。它仍然不工作,它输出所有不按数字过滤的文件。您的命令没有给我输出,至少有10个文件夹少于440个
    *。解决方案
    文件这是一个输出示例:
    sol\u cv\u 212/:2 sol\u cv\u 213/:2 sol\u cv\u 214/:2 sol\u cv\u 215/:2 sol\u cv\u 216/:2 sol\u cv\u 217/:2
    谢谢@anubhava,但是现在我们缺少元素少于440的文件列表…啊,是的,现在添加回来了。现在试试。对不起,我正忙着做其他事情。它仍然不工作,它输出所有未按编号过滤的文件