繁体   English   中英

Bash脚本来查找文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM