![Bash-Skript zum Suchen des Dateiinhalts in einem Verzeichnis und Hinzufügen eines Werts](https://rvso.com/image/1490209/Bash-Skript%20zum%20Suchen%20des%20Dateiinhalts%20in%20einem%20Verzeichnis%20und%20Hinzuf%C3%BCgen%20eines%20Werts.png)
Ich habe ein Verzeichnis mit einer großen Anzahl von Dateien. Ich möchte ein Bash-Skript schreiben, um -
- Geben Sie dieses Verzeichnis ein
- Finden Sie heraus, welche davon Perl-Skripte sind (aber keines davon hat die Erweiterung .pl)
- 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.