これはbashインストールスクリプト用です。スクリプトfoo.shは引数として "DIRECTORY"をとります。さあ、<$HOME>/TEST/TEST_1A/TEST_2A/TEST_3
とdir <$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
という別のディレクトリがあります。UNIX "find"コマンドの使用
スクリプト:foo.shを簡潔に示します。
DIR='find $HOME -type d -name $1 | head 1'
if [ DIR is set to a directory ]
then
rm -rf $DIR
fi
exit 0
使用方法:スクリプトから今foo.sh TEST_3
、唯一<$HOME>/TEST/TEST_1A/TEST_2A/TEST_3
を除去することができます。 <$HOME>/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
しかし、コマンドが<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
にDIR
セットの取得に失敗し、代わりに、結果として空&を返す「見つけます」 DIR
は空で、決して削除することはできません<$HOME>/TEST/TEST_1B/TEST_2B/TEST_3
どのようにしてスクリプトを変更することができますか? tはディレクトリ名だけでなく、ディレクトリへのパスにもNOの問題はありません。事実、一部のユーザは、 "foo.sh"の引数として部分的なディレクトリパスを与えるかもしれません。このような場合でも "foo.sh"が動作することを期待しています
bashスクリプトのソースを投稿してください。私は非常に基本的な、たくさんの長いスクリプトを書いてきました。あなたの議論をエコーするのに役立つものはありません。 – octopusgrabbus