find
以下が機能するようにコマンドでワイルドカード拡張を防ぐ方法はありますか?
find . -iname "foo [bar]"
指摘したとおりここset -f
、私は以前に成功しなかったまま走ってみましたset -o noglob
。setopt noglob
find
bash
以下はUbuntu 10.04を使用するスクリプトです。
ワイルドカードを避けることができることを知っていますが、ワイルドカードを見逃すのではないかと心配です。
答え1
find
@ njsgがすでに述べたように、問題はシェルではなくシェルによって引き起こされます。使用する二重引用符は、すでに式をfind
変更されていない状態に渡してシェルから保護します。
問題はfind
主張をパターンで見る-name
ことです-iname
。これを抑制する唯一の方法は、find
引数をパターンとして扱わないオプションを使用することです。しかし、find
私のマニュアルページによれば、そのようなものがないので、あなたが望むことをすることはできません。あなたができる最も良いことは、括弧をに渡すときにうまく機能するようにスクリプトを強化することですfind
。以下の興味深いsed
置換がこれを行います。
echo "foo [bar]" | sed 's/[][]/\\&/g'
以下を印刷します。foo \[bar\]
答え2
問題はシェルにあるのではなく、検索にあります。-name
とのパラメータは-iname
次のとおりです。模様それ自体。 、またはを[bar]
意味します。角かっこをエスケープしてみてください。例:b
a
r
find
find . -iname 'foo \[bar\]'
(編集:この方法では、シェルレベルでエスケープせずにバックスラッシュをfind
。)