Linux查找脚本结果不会附加到输出文本文件

时间:2018-06-14 04:37:21

标签: linux bash shell

我写了一个小的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" '{}' \;

2 个答案:

答案 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