2012-04-05 30 views
3

我在bash腳本來遍歷並從當前一個目錄使用以下命令:如何使用find包含隱藏的目錄?

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 

什麼情況是,它並遞歸進入目錄,但在隱藏目錄不替換代碼。我也需要它在index. *上進行操作,並且還可以在可能包含空格的目錄中進行操作。

謝謝!

+3

' find'通常應該遍歷所有的目錄條目,包括點隱藏文件。在您的終端上查找別名?請在你的問題中包含'type find'的輸出。我的機器上有 – SingleNegationElimination 2012-04-05 16:26:46

+0

,終端默認搜索隱藏目錄。 – hjpotter92 2012-04-05 16:28:52

+0

請提供更多信息。例如,你應該把'..blah blah'改成一些真實的代碼,例如'回聲「$ D」'。或者更好的是,在讀取時提供'find $ PWD -type d'的輸出而不用所有';做;完成的東西。 – Mikel 2012-04-05 16:30:07

回答

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' 
+0

這太棒了!謝謝。我可以在這些例子中使用index。*嗎?它似乎沒有工作... – 2012-04-05 20:28:30

+0

你可以使用find -name'index。*'。查看find的更多選項(例如-iname)。 – j13r 2012-04-05 20:47:32

+0

請展開'-rt'對'xargs'的意思。 – kyb 2018-02-16 10:53:02