我正在制作一个 bash shell 脚本来查找名称中带有星号字符 (*) 的文件。我的测试目录有两个符合此条件的文件:
./File.With*In.It
./File.With*In.It copy
当我在 OS X 上通过终端运行以下命令时,我得到上面提到的列表作为结果:
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 脚本中的变量?
最佳答案
find
命令在这两种情况下都能正常工作。
为了避免在打印过程中出现通配符,请用双引号将字符串引起来:
listOfStars=$(find . -name '*\**')
printf "%s\n" "${listOfStars}"
./File.With*In.It
./File.With*In.It copy
关于linux - 通过交互式 shell 与脚本查找名称中带有星号 (*) 的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362896/