2

問題は、指定されたフォルダーに対して特定のアクションを実行するカスタム bash スクリプトを持っていることです。構文は次のとおりです。

myscript $1 $2 $3

はフォルダ$1の名前で、$2$3ジョブに必要なその他の数値引数です。

たとえば、多くのフォルダーを含むディレクトリがあるとします。

a
b
c
d
ref-1
ref-2
ref-3

で始まらないフォルダでスクリプトを実行するだけで済みますref-。各ファイルのスクリプトを手動で実行するには多大な労力がかかるため、「extglob」などの逆一致を使用して、正規表現を使用して目的のフォルダーのみに制限する方法を理解したいと考えています。これらのそれぞれが、指定された$2および$3引数を使用してスクリプトを実行します。

4

4 に答える 4

3

たとえば、でき$(ls -d */|grep -v ^ref-)ます。

于 2011-11-26T17:36:33.217 に答える
1

これでうまくいくはずです-

オプションを使用find -type dすると、検索検索をディレクトリに制限できます。を指定するpattern with -not -nameと、一致したディレクトリを無視するのに役立ちます。-exec option見つかったすべてのディレクトリに対してシェルスクリプトを開始するのに役立ちます。{} \;exec がディレクトリごとにシェルスクリプトを一度に実行するためのバッファースペースを意味します。-depth nn ディレクトリ レベルまで確実に下ります。

find . -not -name ref\* -not -name .\* -type d -depth 1 -exec ./script.sh {} \;

アップデート:

残念ながら、2 つのユーザー駆動パラメーターの処理を忘れていました。私は専門家ではないかもしれませんが、私が考える最も簡単な方法は、検索結果をファイルに送信し、そのファイルに対して for ループを実行することです。

このようなもの -

[jaypal~/Temp]$ find . -not -name ref\* -not -name .\* -type d -depth 1 > dirlist
[jaypal~/Temp]$ for i in dirlist; do ./script.sh $i param1 param2; done

ユーザー主導のパラメーターを渡す別の方法 (@dma_k の提案による)

[jaypal~/Temp]$ find . -not -name ref\* -not -name .\* -type d -depth 1 | xargs script.sh param1 param2
于 2011-11-26T21:02:15.250 に答える
1

これはあなたのために働くかもしれません:

ls !(ref-?)

また

ls !(ref*)

また

ls +({a..d})

あるいは単に

ls ?

編集:

スクリプトは次のように実行できます。

for first in !(ref-?); do script.sh $first $second $third; done

secondthirdは数値引数です。

于 2011-11-26T20:04:26.910 に答える
0

どうですか ls | grep yourRegexHere

于 2011-11-26T17:37:50.093 に答える