Unixライク

Unixライク

私がやろうとしているのは、非常に単純なことです。40 個のテキスト ファイルがあり、その中のすべてを削除して、テンプレート テキスト ファイルの内容に置き換える必要があります。

最も簡単/最速の方法は何ですか?

注意: 検索して置換するのではなく、すべてを削除して内部にコピーしたいのです。これは、ファイルを開いて、各ファイルに対して ctrl + A >> del >> ctrl + v を実行するようなものです。

答え1

Unixライク

Unix ライクなコマンドライン (Linux、OSX など) では、 を使用してcatファイルの内容を STDOUT に出力したり、>STDOUT をファイルにリダイレクトしてその内容を上書きしたりできます。

cat template.txt > file.txt

最も簡単な方法は、template.txt別のディレクトリに配置し、 for ループを使用して作業ディレクトリ内のすべての *.txt に影響を与えることです。

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

bash 4+ を搭載したシステム (最近の *nix にはおそらくこの機能が搭載されています。 で確認してくださいbash --version) では、拡張グロブを使用できるため、template.txt上書きしたいファイルと同じディレクトリに次のファイルを置くことができます。

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

多数のサブディレクトリにテキストファイルがある場合(警告:上書きされます)全て *.txt作業ディレクトリとそのすべてのサブディレクトリ、およびそのすべてのサブディレクトリ内のファイルなど) を検索する場合は、globstar を使用できます。

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

ウィンドウズ

構文は異なりますが、同様に機能します。 の代わりにcatを使用しますtype

type template.txt > file.txt

.txtディレクトリ内のすべての項目を操作するには:

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

再帰性には以下を使用します/R:

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

答え2

まあ、あなたが望むことは、自動検索と置換(powergrep が行うのと同じだが無料)で実行できますが、テンプレートを取得して、それを新しいファイルごとにコピーする方が簡単です。これは、コマンド ラインから実行できます。

テンプレートを配置するすべてのファイル名のリストを含むファイルを作成します。

したがって、listoffiles.txt の内容は次のようになります。

ファイル1.txt
ファイル2.txt
ファイル3.txt

次に、コマンドプロンプトを開いて、次の操作を実行します。

C:\fdf>for /f %f in (listoffiles.txt) do @echo copy template.txt %f

template.txt をコピー file1.txt
template.txt をコピー file2.txt
template.txt をコピー file3.txt

C:\fdf>

@echo copy template.txt の行を copy template.txt に変更するだけです。つまり、@echo を削除するか、echo だけを削除します。

c:\fdf に listoffiles.txt と template.txt も必要です。また、file1.txt、file2.txt などが作成されます。

関連情報