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

标签 linux macos bash shell unix

我正在制作一个 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/

相关文章:

linux - 从 Bash 脚本中使用 Apache 执行 'git pull'

linux - 为什么堆栈段在树莓派上是可执行的?

macos - OS X Storyboard : how to show a window programmatically?

objective-c - 如何以编程方式检测 Mac OS X Server Edition?

macos - 在 Storyboard 中使用 NSWindowController 加载工作表

php - 来自 PHP 的带有 SFTP 的 shell 脚本

linux - tar 失败模式 : Not exiting on write fail

linux - 如何以非 root 用户身份运行 docker 容器以及如何将 docker 镜像共享给他人?

linux - SIGCHLD 未在进程树中传递

python - 如何从参数中提取数据?