Bash脚本,查找当前文件夹中包含特定字符串的所有文件

时间:2015-01-22 21:28:05

标签: bash

所以我有一行代码如:

list=$(find . -maxdepth 1 -name "$1" -print0 | sed 's,\.\/,,g')
echo $list

所以当我做bash script_name string

时在终端

我希望它会显示包含“string”的所有文件

现在我在一个文件夹中有4个匹配:TesT1.c TesT1.h TesT2.c TesT2.h

当我做的时候

bash script_name TesT*

我的代码只返回第一个匹配,即TesT1.c

我哪里做错了,提前谢谢

2 个答案:

答案 0 :(得分:1)

当你这样做时:

bash script_name TesT*

bash在调用脚本时展开TesT*并将其设为:

bash script_name TesT1.c TesT1.h TesT2.c TesT2.h

由于您只使用$1,因此您只需:TesT1.c

您需要将脚本称为

bash script_name 'TesT*'

避免扩展glob模式(由于使用单引号)

答案 1 :(得分:0)

当您运行bash script_name TesT*时,您当前的shell会扩展glob,因此您的运行命令实际上是bash script_name TesT1.c TesT1.h TesT2.c TesT2.h

然后您的脚本使用$1(第一个参数)并运行

find . -maxdepth 1 -name "TesT1.c" -print0 | sed 's,\.\/,,g'

显然只会发现自己。

在初始命令行上引用glob。

bash script_name 'TesT*'

此外,没有理由将find的输出填充到变量中,然后将其回传出来。