Unix-ähnlich

Unix-ähnlich

Ich versuche, etwas ganz Einfaches zu machen. Ich habe 40 Textdateien, aus denen ich alles löschen und durch den Inhalt einer Textdateivorlage ersetzen muss.

Was ist der einfachste/schnellste Weg?

NB: Ich möchte nicht suchen und ersetzen, sondern alles löschen und dann hineinkopieren. Das wäre so, als würde ich die Datei öffnen und Strg + A >> Entf >> Strg + V für jede Datei drücken.

Antwort1

Unix-ähnlich

Auf einer Unix-ähnlichen Befehlszeile (unter Linux, OSX usw.) können Sie catden Inhalt einer Datei auf STDOUT drucken und >STDOUT auf eine Datei umleiten und dabei deren Inhalt überschreiben.

cat template.txt > file.txt

Am einfachsten geht das template.txtin einem separaten Verzeichnis. Anschließend können Sie eine For-Schleife verwenden, die auf alle *.txt-Dateien im Arbeitsverzeichnis einwirkt:

for f in ./*.txt; do cat /path/to/template.txt > "$f"; done

Auf Systemen mit Bash 4+ (jedes moderne *nix verfügt wahrscheinlich darüber; prüfen Sie dies mit bash --version) können Sie erweitertes Globbing verwenden, sodass Sie Folgendes im selben Verzeichnis haben template.txtwie die Dateien, die Sie überschreiben möchten:

shopt -s extglob
for f in ./!(*template).txt; do cat template.txt > "$f"; done

Wenn Sie Textdateien in vielen Unterverzeichnissen haben (ACHTUNG: DIES WIRD ÜBERSCHREIBENALLE *.txtDATEIEN IM ARBEITSVERZEICHNIS UND ALLEN SEINEN UNTERVERZEICHNISSEN UND ALLEN IHREN UNTERVERZEICHNISSEN ...), können Sie globstar verwenden:

shopt -s globstar
for f in ./**/*.txt; do cat /path/to/template.txt > "$f"; done

##  OR:
shopt -s globstar extglob
for f in ./**/!(*template).txt; do cat template.txt > "$f"; done

Windows

Dies funktioniert ähnlich, die Syntax ist jedoch anders. Anstelle von catverwenden Sie type:

type template.txt > file.txt

So arbeiten Sie an jedem Element .txtin einem Verzeichnis:

FOR %F IN (*.txt) DO type C:\path\to\template.txt > %F

Verwenden Sie für die Rekursivität /R:

FOR /R %F IN (*.txt) DO type C:\path\to\template.txt > %F

Antwort2

Nun, was Sie wollen, könnte durch eine automatische Suche und Ersetzung erledigt werden (wie Powergrep, aber kostenlos), aber es ist einfacher, einfach die Vorlage zu nehmen und sie als jede neue Datei zu kopieren. Dies kann über die Befehlszeile erfolgen.

Erstellen Sie eine Datei mit einer Liste aller Dateinamen, in die Sie diese Vorlage einfügen möchten.

Der Inhalt von listoffiles.txt lautet also:

Datei1.txt
Datei2.txt
Datei3.txt

Öffnen Sie dann eine Eingabeaufforderung und führen Sie Folgendes aus:

C:\fdf>für /f %f in (listoffiles.txt) mache @echo kopiere template.txt %f

kopiere template.txt file1.txt
kopiere template.txt file2.txt
kopiere template.txt file3.txt

C:\fdf>

Ändern Sie einfach die Zeile „@echo copy template.txt“, sodass „copy template.txt“ lautet, d. h. entfernen Sie „@echo“ oder nur das Echo.

Sie benötigen listoffiles.txt in c:\fdf und template.txt auch dort. Und es wird file1.txt, file2.txt usw. erstellen.

verwandte Informationen