如何在 Bash shell 脚本中将 find 与 glob 一起使用?

如何在 Bash shell 脚本中将 find 与 glob 一起使用?

我正在尝试find使用球体在 Bash shell 脚本中。我尝试过获取它并运行它,但该命令每次都失败。

#!/usr/bin/env bash
# glob-test.sh - a script to test globs in find
cd /to/a/windows/share-point
find ./**/*Some/*Place/**/ -iname "*.pdf"

# How about using foreign characters?
find ./**/*Söme/*Pläce/**/ -iname "*.pdf"
  • 从 bash 命令行它可以工作
  • 我尝试过不同的引用方式。
  • 我努力了采购执行剧本。
  • 我尝试过打开/关闭环球星shell选项,脚本内部和外部都可以,但还是不行。 ( shopt -s/u globstar)

有什么问题以及如何解决它?

答案1

看来这个问题有两个方面,

  • 在 Windows 共享点上执行此操作时,并且采购它,find返回非常慢慢地,第一的时间。但速度要快得多第二时间。无论如何,一定有某种缓冲/缓存正在进行。因此用户认为该命令失败或被阻止。执行时却不是这样。由于采购是在当前 shell 中运行的,globstar因此可能需要启用。作为脚本运行它似乎没有这个问题,而且似乎也独立于环球星环境。

  • 上面的结果是,不知何故字符集也混淆了寻找作为脚本运行与源代码运行时。运行 sourced 将使用正确的终端本地设置字符集,而编写脚本时,将使用默认/操作系统 AFAICT 的字符集。 (我使用 3 种不同的语言工作。)

我在OP中不知道或不知道的是,我在该/*Some/*Place/部分中使用了另一种语言字符(包含变音符号)。我认为这并不重要,但它导致命令失败。因为它秘密地搜索 2 字节的 UTF-8 字符,而只正确显示一个。

我不完全确定 bash 引擎盖下发生了什么,但是摆弄字符集,并耐心等待结果,我让它按预期工作。请随意发布更好或更清晰的答案。

相关内容