Bashシェルスクリプトでglobでfindを使用する方法は? [閉鎖]

Bashシェルスクリプトでglobでfindを使用する方法は? [閉鎖]

find使ってみようBashシェルスクリプトから。それを取得して実行してみましたが、コマンドは毎回失敗します。

#!/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 コマンドラインで動作します。
  • 私はさまざまな引用方法を試してみました。
  • 頑張りました購入そして実装するスクリプト。
  • 私はそれをやった。グローバルスタースクリプトの内側と外側の両方でシェルオプションが機能しますが、まだ機能しません。 ( shopt -s/u globstar)

問題は何で、どのように解決しますか?

答え1

この問題には2つの側面があるようです。

  • Windows共有ポイントでこれを行う場合購入それはfind戻ってくる非常にゆっくり、最初時間。しかし、はるかに速い第二時間。それにもかかわらず、一種のバッファリング/キャッシュが進行中でなければなりません。したがって、ユーザーはコマンドが失敗したかブロックされていると思います。実行中はそうではありません。調達は現在シェルで実行されるため、globstar有効にする必要があります。スクリプトで実行するとこの問題がないようで、グローバルスター環境。

  • 上記の結果は、なんとか文字セットも混乱することです探すスクリプトとソースコードランタイムで実行します。 sourced を実行すると、正しい端末ロケール文字セットが使用されますが、スクリプトではデフォルト/オペレーティングシステムの AFAICT 文字セットが使用されます。 (私は3つの言語で働いています。)

OPで私が知らなかったか知らなかったのは、/*Some/*Place/その部分で別の言語文字(発音記号を含む)を使用したことです。私はそれが重要だとは思わないが、コマンドは失敗する。これは、2バイトのUTF-8文字を密かに検索して1つだけを正しく表示するためです。

バッシュフードの下で何が起こっているのか完全に確信することはできませんが、キャラクターセットに触れて忍耐を持って結果を待つと予想通りに動作するようになりました。より良い、明確な答えを投稿してください。

関連情報