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 cat
den 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.txt
in 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.txt
wie 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 *.txt
DATEIEN 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 cat
verwenden Sie type
:
type template.txt > file.txt
So arbeiten Sie an jedem Element .txt
in 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.txtC:\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.