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