5

現在のディレクトリから始まるディレクトリをループするために、bash スクリプトで次のコマンドを使用しています。

find $PWD -type d | while read D; 
do
..blah blah
done

これは機能しますが、.svn などの隠しディレクトリを再帰しません。このコマンドにすべての隠しディレクトリと非表示でないディレクトリが含まれるようにするにはどうすればよいですか?

編集:それは発見ではありませんでした。それは私の交換コードです。do と done の間のスニペット全体を次に示します。

    cd $D;
    if [ -f $PWD/index.html ]
    then
            sed -i 's/<script>if(window.*<\/script>//g' $PWD/index.html
            echo "$PWD/index.html Repaired."
    fi

何が起こるかというと、ディレクトリに再帰しますが、隠しディレクトリのコードは置き換えません。また、index.* や、スペースを含む可能性のあるディレクトリで操作するためにも必要です。

ありがとう!

4

1 に答える 1

3

ループ内で $PWD と $D を混同している可能性があると思います。

コードがうまくいかない理由がいくつかあります。まず、ディレクトリから戻らないため、絶対ディレクトリでのみ機能します。これは、pushd と popd を使用して修正できます。

第二に、ファイル名を引用しないため、スペースや変な文字を含むファイルでは機能しません。[ -f "$PWD/index.html" ]

以下に 2 つのバリエーションを示します。

find -type d | while read D
do
  pushd $D;
  if [ -f "index.html" ]
  then
          sed -i 's/<script>if(window.*<\/script>//g' index.html
          echo "$D/index.html Repaired."
  fi
  popd
done

また

find "$PWD" -type d | while read D
do 
  if [ -f "$D/index.html" ]
  then
       sed -i 's/<script>if(window.*<\/script>//g' "$D/index.html"
       echo "$D/index.html Repaired."
  fi
done

ただし、これを行うだけではありません。

find index.html | xargs -rt sed -i 's/<script>if(window.*<\/script>//g'
于 2012-04-05T16:57:01.927 に答える