Linux 用少于n个文件回显ls命令的输出
我有400个文件夹,里面有几个文件,我感兴趣的是: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的文件?这个简
.solution
的文件,以及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的文件列表…啊,是的,现在添加回来了。现在试试。对不起,我正忙着做其他事情。它仍然不工作,它输出所有未按编号过滤的文件