我是Bash Scripting的新手,我想制作一个脚本,该脚本将遍历搜索子目录的目录并进入其中以搜索可能位于前面提到的子目录中的文件中的特定字符串。
我目前遇到的问题实际上是第二部分。我试图在当前子目录中逐个访问所有文件,但它只是无法正常工作。这可能是一个愚蠢的问题,但由于我是新手,我发现自己无法找到解决问题的方法。这是代码:
if [[ $1 != "--help" ]];
then
echo "counting results for string: "$1>results.txt
let total=0
for dir in */
do
if [[ -d $dir ]];
then
echo "directory: "$dir>>../results.txt
let dirtotal=0
cd $dir
for i in */
do
if [[ -f $i ]];
then
#look in the file i and count the number of occurrences
let result=`grep -c $1 $i`
echo $i": "$result
let dirtotal=$dirtotal+$result
fi
done
echo "directory total: "$dirtotal>>../results.txt
let total=$total+$dirtotal
cd ..
fi
done
echo "total: "$total>>results.txt
exit 0
else
display_error
exit 1
fi
当为...做...完成循环时,会出现问题。
感谢。
答案 0 :(得分:0)
更改
for i in */
为:
for i in *
以便除了子目录之外还匹配文件。
此外,您应该引用所有变量,以防它们包含空格或通配符。
答案 1 :(得分:0)
您可以使用'find'查找文件(-type f),然后在里面搜索字符串。请注意,双引号约为1美元,使用单引号将无效。 对于在stdout上传输的每个文件名,xargs将执行一次给定的命令。 print0用空字符分隔匹配,然后指示xargs读取-0选项以null分隔的行。
find /your/dir -type f -print0 | xargs -r0 grep "$1" | tee -a result.txt