我在 bash 脚本中使用以下命令来遍历从当前目录开始的目录:
find $PWD -type d | while read D;
do
..blah blah
done
Run Code Online (Sandbox Code Playgroud)
这有效,但不会通过隐藏目录(例如 .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
Run Code Online (Sandbox Code Playgroud)
发生的情况是它会递归到目录中,但不会替换隐藏目录中的代码。我还需要它对 index.* 以及可能包含空格的目录进行操作。
谢谢!
find默认情况下递归所有目录,包括点隐藏目录\xe2\x80\x93\xc2\xa0 这不是问题。
我认为您可能在循环中混淆了 $PWD 和 $D 。
\n有几个选项会导致您的代码也可能出错。\n首先,它仅适用于绝对目录,因为您不会退出该目录。这可以通过使用 Pushd 和 Popd 来修复。
\n其次,它不适用于其中包含空格或有趣字符的文件,因为您没有引用文件名。[-f“$PWD/index.html”]
\n这里有两个变体:
\nfind -type d | while read D\ndo\n pushd $D;\n if [ -f "index.html" ]\n then\n sed -i 's/<script>if(window.*<\\/script>//g' index.html\n echo "$D/index.html Repaired."\n fi\n popd\ndone\nRun Code Online (Sandbox Code Playgroud)\n或者
\nfind "$PWD" -type d | while read D\ndo \n if [ -f "$D/index.html" ]\n then\n sed -i 's/<script>if(window.*<\\/script>//g' "$D/index.html"\n echo "$D/index.html Repaired."\n fi\ndone\nRun Code Online (Sandbox Code Playgroud)\n为什么不直接这样做:
\nfind index.html | xargs -rt sed -i 's/<script>if(window.*<\\/script>//g'\nRun Code Online (Sandbox Code Playgroud)\n