我在bash脚本中使用以下命令来遍历从当前目录开始的目录:
find $PWD -type d | while read D;
do
..blah blah
done
这可行,但不会通过隐藏目录(如.svn)进行递归。如何确保此命令包含所有隐藏目录以及非隐藏目录?
编辑:这不是发现。这是我的替换代码。以下是完成和完成之间的整个片段: 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
会发生什么事情,它会递归到目录中,但不会替换隐藏目录中的代码。我还需要它来操作索引。*以及可能包含空格的目录。
谢谢!
答案 0 :(得分:2)
我认为你可能会在你的循环中混淆$ 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'