簡體   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