[英]Bash Script to find files
美好的一天,我找到了一种简单的方法来查找具有特定内容的文件,但我想创建一个bash脚本来更快地完成它,
脚本是:
#!/bin/bash
DIRECTORY=$(cd `dirname .` && pwd)
ARGUMENTS="'$@'"
echo find: $ARGUMENTS on $DIRECTORY
find $DIRECTORY -iname '*' | xargs grep $ARGUMENTS -sl
所以,如果我写:
$ script.sh text
它应该在该目录中找到包含“文本”的文件
但是,当我执行此脚本时,它总是失败,但是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 .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.