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" ]

这里有两种变体:

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 回答