断片
見つかった最初のディレクトリを入力するコマンドを探していますfoo-something
。たとえば、次のようになります。
cd foo-*
ただし、ワイルドカード(または他の特殊なシェル文字)は使用されません。
とても長い話
リモートの drush ビルドスクリプトの一部として名前を変更できますが、共通のプレフィックスがあるフォルダに入る方法を見つけようとしています。のような例:drush -y dl ads
またはdrush -y dl ads --dev
ダウンロードads-7.x-1.0-alpha1
またはads-7.x-1.x-dev
)。
作業をさらに面倒にするために、コマンドには次のものを含めることはできません。ワイルドカードまたはエスケープセミコロン、drushは多くのシェルエイリアスをエスケープするためです。
だからls *
詰まり、ls '\''*'\'''
最終的に間違った結果が得られますCommand ls '*' failed.
。
私も試してみましたが、基本はfind
利用できません。-exec
セミコロンをエスケープする必要があります。'\''\;'\''
、drushは()で二重エスケープします。
foo-*
したがって、可能であれば、ワイルドカード(または他の特殊文字、パラメータ拡張、コマンド置換、算術拡張など)を使用せずにフォルダに入れたいと思います。
私はシェル脱出のロジックが次のようになると思います。ここescapeshellarg()
Linuxと同じように動作します。それがすることは、すべてのパラメータをエスケープすることです。
答え1
ドラッシュ錆にはバックティックと縦棒がありますか?それ以外の場合は、次のものを使用できます。
cd `ls | grep foo- | head -n 1`
バックティックが機能しないが|
、$
および(
動作する場合、)
上記を次のように変更できます。
cd $(ls | grep foo- | head -n 1)
ただし|
、うまくいかずに$
動作する(
場合は、)
次のことができます。
cd $(myprog)
myprog
ディレクトリ名を決定するために作成したスクリプトはどこにありますか?
find
また、 - を使用して実行するのにどのように役立つかはわかりませんがcd
、-exec
使用して終了できますか+
?
答え2
locate
次のユーティリティを試すこともできます。
updatedb -o ~/tmp.db -l0 -U $PWD; cd $(locate -d ~/tmp.db -l 1 -b -r foo-)
より複雑な正規表現パターン検査の場合info locate
。
答え3
に基づいて最終要件その必要はありませんcd
。次のようにします。
find . -type d -name 'foo-*' -exec make -C {} ';'
そして
find . -type d -name 'foo-*' -exec phing -f {}/build.xml ';'
アスタリスクは内部的に処理され、find
POSIXに準拠していると思います。