Finden Sie alle PHP-Dateien, deren erste oder zweite Zeile mehr als N Zeichen hat

Finden Sie alle PHP-Dateien, deren erste oder zweite Zeile mehr als N Zeichen hat

Ich möchte alle PHP-Dateien auf meinem Server finden, deren erste oder zweite Zeile mehr als N Zeichen enthält.

Ich möchte sowohl den Dateinamen als auch den gefundenen Zeileninhalt ausdrucken.

Wie würde ich das machen? Ich denke darüber nach, grep zu verwenden, aber ich weiß nicht, wie ich damit Zeilen in einer Datei analysieren kann.

Antwort1

So geht's:

MIN_WIDTH=30

for f in $(find / -iname  '*\.php'); do
  if [ $(head -n 2 "$f" | tail -n 1 | wc -c) -gt $MIN_WIDTH ] || [ $(head -n 1 "$f" | wc -c) -gt $MIN_WIDTH ]; then    
    echo "$f";
  fi
done

hier ist eine Aufschlüsselung:

  • alle Dateien suchen .php: find / -regex '.*\.php$'
  • Holen Sie sich die zweite Zeile der Datei und zählen Sie die Anzahl der Zeichen:head -2 "$f" | tail -1 | wc -c
  • Holen Sie sich die erste Zeile der Datei und zählen Sie die Anzahl der Zeichen:head -1 "$f" | wc -c
  • Vergleichen Sie, ob jeder größer als $MIN_WIDTH ist: `[ $(…) -gt $MIN_WIDTH ]
  • wenn einer dieser Werte größer ist als $MIN_WIDTH:if […] | […]
  • Drucken Sie den Namen der Datei aus:echo "$f"

Antwort2

Eine etwas kürzere Variante als zmo's

find -iname "*.php" -exec grep -HP '.{6,}' {} \; | grep -P '^.+:[12]:'

wobei 6 die Mindestanzahl an Zeichen ist. Die -HOption besteht darin, den Dateinamen auch dann auszugeben, wenn nur eine Datei gesucht wird (das ist der Fall, weil jede gefundene Datei einzeln über den {}Operator gesucht wird).

verwandte Informationen