2012-04-05 5 views
3

Ich bin mit dem folgenden Befehl in einem Bash-Skript in einer Schleife durch die Verzeichnisse auf dem aktuellen Start:Wie kann ich versteckte Verzeichnisse mit finden?

find $PWD -type d | while read D; 
do 
..blah blah 
done 

das funktioniert aber nicht durch versteckte Verzeichnisse wie Svn ist Rekursion. Wie kann ich sicherstellen, dass dieser Befehl alle versteckten Verzeichnisse sowie nicht verborgene enthält?

EDIT: es war nicht der Fund. Es ist mein Ersatzcode. Hier ist der gesamte Schnipsel von dem, was geht zwischen dem Do und getan:

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 

Was passiert, ist, dass es in die Verzeichnisse DOES Rekursion aber nicht den Code in den versteckten Verzeichnissen ersetzen. Ich brauche es auch auf Index. * Und auch in Verzeichnissen, die ein Leerzeichen enthalten können.

Danke!

+3

' find sollte normalerweise alle Verzeichniseinträge durchlaufen, einschließlich der versteckten Dateien. ist ein Alias ​​auf Ihrem Terminal? Bitte geben Sie die Ausgabe von 'type find' in Ihre Frage ein. – SingleNegationElimination

+0

Auf meinem Computer sucht das Terminal standardmäßig nach versteckten Verzeichnissen. – hjpotter92

+0

Bitte geben Sie weitere Informationen an. Zum Beispiel sollten Sie '..blah blah' in einen echten Code ändern, z. 'echo" $ D "'. Oder besser noch, stellen Sie die Ausgabe von 'find $ PWD -type d' ohne all 'while read; machen; fertig gemacht. – Mikel

Antwort

2

Ich denke, Sie könnten $ PWD und $ D in Ihrer Schleife vermischen.

Es gibt ein paar Optionen, warum Ihr Code auch schief gehen kann. Erstens funktioniert es nur mit absoluten Verzeichnissen, weil Sie nicht aus dem Verzeichnis zurückgehen. Dies kann mit Pushd und Popd behoben werden.

Zweitens wird es nicht für Dateien mit Leerzeichen oder lustigen Zeichen in ihnen arbeiten, weil Sie den Dateinamen nicht zitieren. [-f "$ PWD/index.html"]

Hier sind zwei Varianten:

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 

oder

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 

Warum nicht nur dies aber:

find index.html | xargs -rt sed -i 's/<script>if(window.*<\/script>//g' 
+0

Das ist großartig! Vielen Dank. Kann ich index. * In diesen Beispielen verwenden? Es scheint nicht zu funktionieren ... –

+0

können Sie find -name 'index. *' Verwenden. Weitere Optionen finden Sie auf der Hilfeseite von find (z. B. -iname). – j13r

+0

Bitte erweitern Sie, was '-rt' für' xargs' bedeutet. – kyb

Verwandte Themen