2017-06-13 5 views
0

私はパスを移動し、collectorlist*を開始するファイルを削除しようとしているので、以下のようなシェルスクリプトを書いていますが、-eオプションは常に出力が見つかりません。親切に私にお勧めします。シェルスクリプトファイルの検索

スクリプト

if [ -d "/abc" ] ; then 
for c in `ls -1 "/abc/"`; do 
    if [ -d "/abc/${c}" ] ; then 
    if [ -d "/abc/${c}/dynatrace/agent/linux-x86-64/agent/conf/" ] ; then 
     if [ -e "/bxp/${c}/dynatrace/agent/linux-x86-64/agent/conf/collectorlist* " ] && echo "Found" || echo "Not found" ; then 
      `ls -ltr "sat.txt"` > /users/home/abc/test.txt 
      fi 
     fi 
    fi 
done 
fi 
+0

私は*の後にスペースを末尾の削除、問題はまだ – Satte

答えて

1

あなたのコードのいくつかの問題があります。

  1. アスタリスクの後と閉じる二重引用符の前にスペースがあります。
  2. アスタリスクを二重引用符で囲んで使用しています。二重引用符で囲まれたアスタリスクのようなワイルドカードは評価されず、そのまま使用されます。
  3. リダイレクトとともにバッククッキーを使用しています。これは、バッククォート内のものを実行し、バックティック式をその出力で置き換え、結果の行を実行します。したがって、あなたのlsコマンドは実行されるコマンドの名前を与える必要があります。私はあなたがそれを望んでいないと思う。バックチックを取り除くだけで、おそらくlsを実行してその出力をファイルにリダイレクトするだけです。
  4. パターンに一致するファイルが存在するかどうかを調べて、このファイルに[ -e pattern* ]を使用してみてください。 pattern*は、pattern*自体に1つ以上のファイル名または(存在しない)ファイル名を評価します(シェルを微調整して動作を変えない限り)。問題は多くの価値の場合です。これらはあなたの[ ... ]表現の中で問題を引き起こすでしょう。

結果:

if [ -d "/abc" ] ; then 
    for c in $(ls -1 "/abc/"); do 
    if [ -d "/abc/${c}/dynatrace/agent/linux-x86-64/agent/conf/" ] ; then 
     if ls "/bxp/${c}/dynatrace/agent/linux-x86-64/agent/conf"/collectorlist* &> /dev/null; then 
     echo "Found" 
     ls -ltr "sat.txt" > /users/home/abc/test.txt 
     else 
     echo "Not Found" 
     fi 
    fi 
    done 
fi 
+0

そのは完璧持続します。ありがとうございます – Satte

関連する問題