Bash脚本来查找文件

好日子,我发现了一个简单的方法来查找具有某些内容的文件,但我想创build一个bash脚本来做到这一点更快,

脚本是:

#!/bin/bash DIRECTORY=$(cd `dirname .` && pwd) ARGUMENTS="'$@'" echo find: $ARGUMENTS on $DIRECTORY find $DIRECTORY -iname '*' | xargs grep $ARGUMENTS -sl 

所以如果我写:

 $ script.sh text 

它应该在该目录中find包含“文本”

但是当我执行这个脚本时总是失败,但是echo命令正好显示了我需要的东西,这个脚本有什么问题?

谢谢!

路易斯

参考文献: http : //www.liamdelahunty.com/tips/linux_find_string_files.php

如果当前目录或搜索模式中包含空格,则在此脚本中引用会有问题。 以下更简单,并解决了这两个问题:

 find . -maxdepth 1 -type f -exec grep "$@" {} + 

通过正确引用$@ ,您甚至可以将选项传递给grep,例如-i

 ./script -i "some text" 

尝试此版本,并进行以下更改:

1.使用$1而不是$@除非您打算运行多个find / grep来搜索多个模式。

2.使用find $DIR -type f找到所有文件而不是find $DIR -iname '*'

3.使用find-exec命令行选项避免管道。

4.不要单引号给你的脚本的命令行参数,这是你的版本的主要问题。 您的grep字符串已经逃脱了单引号\'search_string\'

 #!/bin/bash DIRECTORY=$(cd `dirname .` && pwd) ARGUMENTS="$1" echo find: $ARGUMENTS on $DIRECTORY find $DIRECTORY . -type f -exec grep -sl "$ARGUMENTS" {} \; 

没有意义提取所有的命令行参数并将其传递给grep 。 如果要搜索带空格的字符串,请在命令行的单引号内传递字符串,如下所示:

 /home/user/bin/test-find.sh 'i need to search this' 

为什么不只是运行以下?

 grep -R text .