Bash脚本来查找文件

时间:2013-03-02 18:39:58

标签: linux bash filesystems

美好的一天, 我找到了一种查找具有特定内容的文件的简单方法,但我想创建一个bash脚本来更快地完成,

脚本是:

#!/bin/bash
DIRECTORY=$(cd `dirname .` && pwd)
ARGUMENTS="'$@'"

echo find: $ARGUMENTS on $DIRECTORY
find $DIRECTORY -iname '*' | xargs grep $ARGUMENTS -sl

所以,如果我写:

$ script.sh text

它应该在该目录中找到包含“text”

的文件

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

谢谢!

路易斯

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

3 个答案:

答案 0 :(得分:4)

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

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

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

./script -i "some text"

答案 1 :(得分:2)

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

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

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

3.使用-exec的{​​{1}}命令行选项避免管道。

4.不要单独引用脚本的命令行参数,这是您拥有的版本的主要问题。您的grep字符串已转义为单引号find

\'search_string\'

没有必要提取所有命令行参数并将其传递给#!/bin/bash DIRECTORY=$(cd `dirname .` && pwd) ARGUMENTS="$1" echo find: $ARGUMENTS on $DIRECTORY find $DIRECTORY . -type f -exec grep -sl "$ARGUMENTS" {} \; 。如果要搜索带空格的字符串,请在命令行的单引号内传递字符串,如下所示:

grep

答案 2 :(得分:1)

为什么不运行以下内容?:

grep -R text .
相关问题