【发布时间】:2015-05-30 14:04:53
【问题描述】:
如果我有 10 个名为 01-a.txt、02-a.txt、...10-a.txt 的文件 - 如何找到数量大于 5 的文件?我想要一个通用的解决方案,我会使用类似的东西将所有文件的内容放入一个文件中
cat *.txt > bigfile.txt
我可以使用数字获取文件
ls *[0-9]*
但似乎无法超越。
谢谢。
【问题讨论】:
如果我有 10 个名为 01-a.txt、02-a.txt、...10-a.txt 的文件 - 如何找到数量大于 5 的文件?我想要一个通用的解决方案,我会使用类似的东西将所有文件的内容放入一个文件中
cat *.txt > bigfile.txt
我可以使用数字获取文件
ls *[0-9]*
但似乎无法超越。
谢谢。
【问题讨论】:
您可以为此使用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
【讨论】:
seq ... 部分放入重音符号中(它在 SO 上用于代码格式化)。您也可以使用 bash $(...) 语法,即:cat $(seq -f "%02g-a.txt" 6 10) > bigfile.txt
假设文件夹只包含这些文件。
这将列出编号大于 5 的所有文件
ls [0-9]* | awk -F '-' '{if ($1 > 5) print $0}'
【讨论】:
ls -1v 10.10.[0-9]* | awk -F '.' '{if ($3 > 125) print $0}'
它将 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
【讨论】:
ls *.txt | perl -n -e '$f = $_; $f =~ s/\D//g; $f > 5 and print'
【讨论】: