如何在 find 中包含隐藏目录?

Dou*_*ram 5 bash find

我在 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.* 以及可能包含空格的目录进行操作。

谢谢!

j13*_*13r 6

find默认情况下递归所有目录,包括点隐藏目录\xe2\x80\x93\xc2\xa0 这不是问题。

\n

我认为您可能在循环中混淆了 $PWD 和 $D 。

\n

有几个选项会导致您的代码也可能出错。\n首先,它仅适用于绝对目录,因为您不会退出该目录。这可以通过使用 Pushd 和 Popd 来修复。

\n

其次,它不适用于其中包含空格或有趣字符的文件,因为您没有引用文件名。[-f“$PWD/index.html”]

\n

这里有两个变体:

\n
find -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\n
Run Code Online (Sandbox Code Playgroud)\n

或者

\n
find "$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\n
Run Code Online (Sandbox Code Playgroud)\n

为什么不直接这样做:

\n
find index.html | xargs -rt sed -i 's/<script>if(window.*<\\/script>//g'\n
Run Code Online (Sandbox Code Playgroud)\n