2012-04-05 7 views
3

私は、現在の1から始まるディレクトリをループするためにbashスクリプトで次のコマンドを使用しています:findで隠しディレクトリを含めるにはどうしたらいいですか?

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

これは動作しますが、そのようなの.svnなどの隠しディレクトリを再帰しません。このコマンドに非表示の隠しディレクトリだけでなく隠しディレクトリもすべて確実に含めるにはどうすればよいですか?

EDIT:それは見つからなかった。それは私の交換コードです。ここで行うと行わ間で何が起こって全体の抜粋です:

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 

何が起こることは、それがディレクトリに再帰んが、隠しディレクトリ内のコードを置き換えるものではありませんということです。また、インデックス。*上で動作する必要があります。また、ディレクトリにはスペースが含まれている必要があります。

ありがとうございます!

+3

' find'は通常、ドット隠しファイルを含むすべてのディレクトリエントリを反復処理する必要があります。あなたの端末のエイリアスを 'find 'していますか?あなたの質問に 'type find'の出力を含めてください。私のマシン上の – SingleNegationElimination

+0

では、端末はデフォルトで隠しディレクトリを探しています。 – hjpotter92

+0

詳細をご記入ください。たとえば、 '..blah blah'を実際のコードに変更する必要があります。 'echo" $ D "'あるいは、 'write $ PWD -type d'の出力を' read while while all 'なしで提供する方がいいでしょう。行う;完了したもの。 – Mikel

答えて

2

あなたのループに$ PWDと$ Dが混在している可能性があります。

コードが間違っている可能性があるいくつかのオプションがあります。 まず、ディレクトリから脱退しないので絶対パスだけで動作します。これは、pushdとpopdを使って修正することができます。

第2に、ファイル名にスペースや面白い文字が含まれているファイルは、ファイル名を引用符で囲まないため動作しません。ここで

[ "$ PWD/index.htmlの" -f]が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' 
+0

これは素晴らしいことです!ありがとう。これらの例でindex。*を使用できますか?それは動作していないようです... –

+0

find -name 'index。*'を使用することができます。他のオプションについては、findのマンページを参照してください(例:-iname)。 – j13r

+0

'-arg 'が' xargs'を意味するものを拡張してください。 – kyb

関連する問題