Bash-Skript zum Suchen des Dateiinhalts in einem Verzeichnis und Hinzufügen eines Werts

Bash-Skript zum Suchen des Dateiinhalts in einem Verzeichnis und Hinzufügen eines Werts

Ich habe ein Verzeichnis mit einer großen Anzahl von Dateien. Ich möchte ein Bash-Skript schreiben, um -

  1. Geben Sie dieses Verzeichnis ein
  2. Finden Sie heraus, welche davon Perl-Skripte sind (aber keines davon hat die Erweiterung .pl)
  3. Fügen Sie am Anfang jeder Zeile eine Zeile hinzu (ich beabsichtige, einen neuen Shebang hinzuzufügen). Wenn es sich nicht um ein Perl-Skript handelt, tun Sie nichts

Ich kann nicht nach den Perl-Skripten suchen. Ich habe es mit grep versucht, aber nicht den richtigen Befehl erhalten. Außerdem stecke ich auch beim dritten Schritt fest.

Antwort1

Um die Perl-Dateien zu finden, können Sie sie am besten mithilfe von Perl selbst ermitteln.perl -cgibt einen Exit-Code ungleich Null zurück, wenn die Datei kein korrekter Perl-Code ist, was definitiv für die MEISTEN Dateien zutrifft, die überhaupt nicht Perl sind. Leider passiert das Gleiche, wenn es mit fehlerhaftem Perl-Code gefüttert wird, und es gibt 0 zurück, wenn die Datei tatsächlich kein Perl-Code ist, aber ohne Fehler analysiert werden kann, als ob sie einer wäre. Wenn Sie mit diesem Risiko leben können, könnte der Kern davon Folgendes sein:

for FILE in * ; do
   if perl -c "$FILE" >/dev/null ; then
      sed -i -e '1i#!/usr/bin/perl' "$FILE"
   fi
done

Anmerkung: Wenn ich die Dateien sowieso berühre, würde ich die Erweiterung .pl hinzufügen, es sei denn, es gibt WIRKLICH schwerwiegende Gründe, blind zu sein.

verwandte Informationen