bashで複数の一致をフィルタリングするために "find"を使う

Possible Duplicate:
Unix “find” command usage

これはbashインストールスクリプトのためのものです。スクリプトfoo.shは引数として "DIRECTORY"をとります。さあ、dir/TEST/TEST_1A/TEST_2A/TEST_3と別のディレクトリ/ TEST/TEST_1B/TEST_2B/TEST_3があるとします。

スクリプト:foo.shを簡単に説明します。

DIR=`find $HOME -type d -name $1 | head 1'
if [ DIR is set to a directory ]
then
rm -rf $DIR

使用法:foo.sh TEST_3

スクリプトからは、/ TEST/TEST_1A/TEST_2A/TEST_3のみを削除できます。/TEST/TEST_1B/TEST_2B/TEST_3を削除するには、findコマンドでreg expを使用して、ディレクトリの競合を解決するために削除を微調整する必要があります。

上記のスクリプトの検索部分を次のように変更しました

DIR='find $HOME -type d -regexp $1 | head 1

新しい使用法:foo.sh TEST_2B/TEST_3

But "find" command FAILS to get the DIR set to /TEST/TEST_1B/TEST_2B/TEST_3 and instead returns empty & as a result DIR is empty and I can never ever remove /TEST/TEST_1B/TEST_2B/TEST_3

どのようにスクリプトを変更すれば、findはディレクトリ名だけでなく、ディレクトリへのパスにも何の問題も起こらないようにすることができます。事実、一部のユーザは、 "foo.sh"の引数として部分的なディレクトリパスを与えるかもしれません。そのような場合でも "foo.sh"が動作することを期待しています

0
あなたは ` 'の文字を自由に交換しているようです。それはあなたの投稿にしかありませんか?または、スクリプトが `文字の代わりに 'を使用しようとしていますか?
追加された 著者 sarnold,
.. head(1)コマンドが実際に 何を認識していますか?
追加された 著者 sarnold,
'新しい使用法のセクション'にあるようにサブディレクトリ/パスを指定することはできません。 findは指定されたディレクトリ構造内のファイルエントリを検索します(ファイルが実際のファイルであるかdirecotryであるかを問わず、一度に2つのレベルを検索するよう要求しています。 TEST_3の両方のディレクトリを削除しますか?削除したいディレクトリがリストの最初のものであることを確認してください。常に例。幸運。
追加された 著者 shellter,
あなたの最初の質問を編集する方法を学び、同じことを複数回投稿しないでください。どのような努力の無駄。がんばろう。
追加された 著者 shellter,

1 答え

私がこれをやっていたら、私はそれをすべて連鎖させるだけです:

find $HOME -type d -name $1 | grep '\bTEST_.*?A\b' | xargs rm -rf

これは、 "TEST_A"を含むパス上にある場合のみ、すべてのディレクトリを削除します。

0
追加された