cat foo.txt | xargs touch
を使用してリストから空のファイルと複数の空のファイルを1回作成するためにtouch
を使用しました。さらに、私は を使って複数のファイルを作成しましたか? しかし、純粋なbashを使用したファイルのリストからテンプレートを使用するファイルの作成を実装する方法を理解するのに問題があります。
Foo.txtファイルのファイル名:
cpt-one.php
cpt-two.php
cpt-three.php
template.txt:
// lots of code
touch
を使用して、空のファイルを作成する代わりにtemplate.txtの内容を使用してリストからファイルを作成する方法はありますか?
bash
- esqueの方法(明示的なループなし)は
ファイル名をシェル配列変数に読み込みます
mapfile -t files < foo.txt
またはその同義語readarray -t files < foo.txt
tee
コマンド内の配列を展開します
tee < template.txt -- "${files[@]}" > /dev/null
[> /dev/null
はオプションです-tee
のデフォルトの標準出力をターミナルから隠すだけです。]
作成する必要がある数千のファイルがない限り、ブレース拡張を使用できます。
$> touch cpt-{one,two,three}.php
$> ls
cpt-one.php cpt-three.php cpt-two.php
目的はtemplateのクローンを作成することなので、tee
を使用してstdinを複数のファイルにリダイレクトします。 tee
はファイルとstdoutの両方に書き込むため、端末にエコーが表示されます
$> cat template.txt | tee cpt-{one,two,three}.php
I'm template
または、while read
構造体を使用できます。シェルリダイレクトを使用します。
$> rm *
$> vi inputFile.txt
$> while read FILE; do touch "$FILE" ; done < inputFile.txt
$> ls
cpt-one cpt-three cpt-two inputFile.txt
これは単純な例であり、ファイルのエントリに特別な文字が含まれていないことを前提としています
さて、実際には単一のファイルを複数にコピーしたいので、同じ構造をcp /path/to/template "$FILE"
に使用できます
$> ls
inputFile.txt template.txt
$> cat template.txt
I'm template
$> while read FILE; do cp template.txt "$FILE" ; done < inputFile.txt
$> cat cpt-one.php
I'm template
$>