标题说明了一切.我已经设法得到了这条线:
lines=$(wc file.txt | awk {'print $1'});
但我可以使用辅助将其附加到文件名.奖励点用于向我展示如何在当前目录中的所有.txt文件上循环它.
find -name '*.txt' -execdir bash -c \ 'mv -v "$0" "${0%.txt}_$(wc -l < "$0").txt"' {} \;
哪里
bash
为每个(\;
)匹配的文件执行该命令;
{}
由当前处理的文件名替换,并作为第一个参数($0
)传递给脚本;
${0%.txt}
.txt
从字符串后面删除最短匹配(参见官方Bash脚本指南);
wc -l < "$0"
仅打印文件中的行数(例如,请参阅此问题的答案)
样本输出:
'./file-a.txt' -> 'file-a_5.txt' './file with spaces.txt' -> 'file with spaces_8.txt'