我写了一个小的shell脚本,以识别我的网站中的PDF文件关联页面。
将pdf源列表URL逐一作为输入并在网站内容中查找递归。
问题是我运行脚本时发现结果没有附加到输出文件, 但是当我拿起find命令并在terminal / putty中手动运行时,可以看到结果。
脚本:
#!/bin/bash
filename="PDF_Search_File.txt"
while read -r line
do
name="$line"
echo "*******pdf******** - $name\n" >>output_pdf_new.txt
find . -type f -exec grep -l "$name" '{}' \; >>output_pdf_new.txt
echo "*******pdf******** - $name\n" >>output_pdf_new.txt
done < "$filename"
源列表网址输入文件(PDF_Search_File.txt)
/static/pdf/pdf1.pdf
/static/pdf/pdf2.pdf
/static/pdf/pdf3.pdf
--------------------
输出结果文件(output_pdf_new.txt)
./Search_pdf.sh
*******pdf******** - /static/pdf/pdf1.pdf\n
*******pdf******** - /static/pdf/pdf1.pdf\n
./Search_pdf.sh
*******pdf******** - /static/pdf/pdf2.pdf\n
*******pdf******** - /static/pdf/pdf2.pdf\n
./Search_pdf.sh
*******pdf******** - /static/pdf/pdf3.pdf\n
*******pdf******** - /static/pdf/pdf3.pdf\n
------------------------------------------
当手动运行查找时,terminal / putty可以看到下面的结果。
find . -type f -exec grep -l "/static/pdf/pdf1.pdf" '{}' \;
./en/toyes/zzz/index.xhtml
./en/toyes/kkk/index.xhtml
--------------
但是脚本有问题,只有将回声结果作为上面的输出结果。
更新 当我用bash -x执行脚本时,它会给出以下结果
[user@server1 generated_content]# bash -x Search_pdf.sh
+ filename=PDF_Search_File.txt
+ read -r line
+ name=$'/static/pdf/pdf1.pdf\r'
\n'cho '*******pdf******** - /static/pdf/pdf1.pdf
+ find . -type f -exec grep -l $'/static/pdf/pdf1.pdf\r' '{}' ';'
\n'cho '*******pdf******** - /static/pdf/pdf1.pdf
+ read -r line
+ name=$'/static/pdf/pdf2.pdf\r'
\n'cho '*******pdf******** - /static/pdf/pdf2.pdf
+ find . -type f -exec grep -l $'/static/pdf/pdf2.pdf\r' '{}' ';'
这里有点不对劲
+ find . -type f -exec grep -l $'/static/pdf/pdf2.pdf\r' '{}' ';'
find命令应如下所示,但执行
时如上所述find . -type f -exec grep -l "/static/pdf/pdf1.pdf" '{}' \;
答案 0 :(得分:0)
您是否在echo
中尝试了 -e 选项来启用反斜杠转义的解释?
你为什么不简单地做 find | grep
?
找到./-type f | grep“$ name”&gt;&gt; output_pdf_new.txt 击>
在find中尝试关注( ./ 而不是。)
find ./ -type f -exec grep -l "$name" '{}' \; >>output_pdf_new.txt
答案 1 :(得分:0)
grep -rl用于for循环内的文件:
cd /www/webroot/
grep -rl "${name}" * | while read file_path; do
# I need to do something with each file
echo $file_path
done
或者我只需要将输出运行到文件
cd /www/webroot/
grep -rl "${name}" * >> output_pdf_new.txt