我有一大堆文件(大约10k),文件名以prefix
开头。他们没有任何延期。我想给它们一个数字扩展,它对应于每个包含某个string
的行数。我知道如何使用grep来找到这个数字:
grep -c string *
输出(提取)
prefix0123:1
prefix9876:5
我想要的是将计数添加为扩展名,即获取
prefix0123.1
prefix9876.5
我正在使用bash控制台。
答案 0 :(得分:1)
最好的方法是在file:count
中生成一个grep
对,方法是添加一个带有-r
标记的递归搜索,然后将其重新命名为
grep -cr bash * | while IFS=':' read -r file count; do
mv -v "$file" "${file}.${count}"
done
您可以首先用mv
替换echo "$file" "${file}.${count}"
以确认是否所有文件都已重命名为期望,然后使用mv
命令
答案 1 :(得分:0)
您可以为每个文件运行一次grep
命令,并将其输出直接替换为新文件名:
for i in *
do
test -f "$i" || continue
mv -nv "$i" "$i.$(grep -c string "$i")"
done
我已经明确排除了非常规文件,因为grep
不像目录那样作为参数(如果你愿意,你可以允许符号链接)。我还在移动命令中添加了-n
,因此我们不会意外覆盖任何现有文件。