通过交互式shell与脚本在名称中查找带有星号(*)的文件

时间:2015-07-11 23:33:07

标签: linux macos bash shell unix

我正在制作一个bash shell脚本来查找名称中带有星号字符的文件(*)。我的测试目录有两个符合此标准的文件:

./File.With*In.It
./File.With*In.It copy

当我在OS X上通过Terminal运行以下命令时,我得到上面的上述列表作为我的结果:

find . -name '*\**'

但是,在我的shell脚本中,我有以下代码行:

listOfStars=`find . -name '*\**'`
printf "%s\n" ${listOfStars}

而且,如果我执行脚本,我得到的结果包括目录中的每个文件:

.
./File.With"In.It
./File.With"In.It copy
./File.With*In.It
./File.With*In.It copy
./File.With.In.It.
./File.With.In.It. copy.
./File.With:In.It
./File.With:In.It copy
./File.With<In.It
./File.With<In.It copy
./File.With>In.It
./File.With>In.It copy
./File.With?In.It
./File.With?In.It copy
./File.With\In.It
./File.With\In.It copy
./File.With|In.It
./File.With|In.It copy

在进一步测试中,如果我在终端中执行这两行代码,我也会得到相同的结果;目录中的每个文件都与搜索匹配。显而易见的结论是find - 在我使用它的方式 - 给我一个不同的结果,当它分配给我的变量时,而不是我自己运行命令。

我可以做些什么让find在我的变量中表现得像它自己召唤时一样? 是否有更谨慎的方法来获取名称中包含星号(*)的文件列表并将其分配给我的bash shell脚本中的变量?

1 个答案:

答案 0 :(得分:2)

find命令在两种情况下都能正常工作 要在打印过程中避免使用globbing,请用双引号括起您的字符串:

listOfStars=$(find . -name '*\**')
printf "%s\n" "${listOfStars}"
./File.With*In.It
./File.With*In.It copy