使用grep在其他bash文件中查找文件名

时间:2014-06-20 14:39:33

标签: bash file unix grep output

如何循环输入文本文件中的bash文件名列表,并为每个文件名grep目录中的每个文件(查看文件中是否包含文件名)并输出到文本所有文件名在任何文件中都找不到?

#!/bin/sh

#This script will be used to output any unreferenced bash files
#included in the WebAMS Project
#Read file path of bash files and file name input

SEARCH_DIR=$(awk -F "=" '/Bash Dir/ {print $2}' bash_input.txt)
FILE_NAME=$(awk -F "=" '/Input File/ {print $2}' bash_input.txt)

echo $SEARCH_DIR
echo $FILE_NAME

exec<$FILE_NAME

while read line
do
    echo "IN WHILE"
    if (-z "$(grep -lr $line $SEARCH_DIR)"); then
        echo "ENTERED"
        echo $filename
    fi
done

3 个答案:

答案 0 :(得分:1)

将其另存为search.sh,根据您的环境更新SEARCH_DIR

#!/bin/bash

SEARCH_DIR=some/dir/here

while read filename
do
        if [ -z "$(grep -lr $filename $SEARCH_DIR)" ]
        then
                echo $filename
        fi
done

然后:

chmod +x search.sh
./search.sh  files-i-could-not-find.txt

答案 1 :(得分:0)

可以通过grepfind命令

while read -r line; do (find . -type f -exec grep -l "$line" {} \;); done < file

while read -r line; do grep -rl "$line"; done < file

-r - &gt;递归
-l - &gt; files-with-matches(显示包含搜索字符串的文件名)

它将读取输入文件中存在的所有文件名,并搜索包含readed文件名的文件名。如果找到任何,则返回相应的文件名。

答案 2 :(得分:0)

您在if声明中使用常规括号而不是方括号。

方括号是 test 命令。您正在做的是运行测试(在您的情况下,字符串是否长度为零。如果测试成功,[ ... ]命令将返回零退出代码。{{1} }语句看到退出代码并运行if语句的then子句。否则,如果存在if语句,则运行该语句。

由于else实际上是命令,因此 必须 在每一侧留下空白。

[ .. ]

错误

if [ -z "$string" ]

排序错误

如果[-z $ sting]#在&#34; $ string&#34;是空的或包含空格

顺便说一句,以下是相同的:

if [-z "$string"]   # Need white space around the brackets

小心if test -z "$string" if [ test -z "$string" ] 命令。如果返回的字符串中有空格或NL,则可能无法按照您的想法执行操作。