list.txt
があるとします このように:
file 1
file 2
file 3
あなたが望むものを達成することができます:
while read FILE; do touch "${FILE} some string"; done < list.txt
ファイル list
ができました 以下を含む:
this
that
the-other
そのファイルの各行に対して、その行に指定された名前のファイルを作成します。これはとても簡単です – 各行が 1 つの単語だけで構成されている場合のみ:
cat list | xargs touch --
(--
touch
に伝えます それ以降を引数として解析しようとしないでください。 -this
のようなファイル名がある場合は、それなしで 、先頭の -
touch を混乱させて、't'、'h'、'i'、および 's' は、実際のファイル名の一部ではなく、引数として意味されていると考えてしまいます。)
これは処理された単純なケースですが、あなたが求めたものではありません。ファイル名に list
の行で指定された内容以外のテキストを含めたい場合 、事態はさらに複雑になります。 xargs はそのような補間を行うことができません。代わりに、次のようなものが必要になります (シェルが bash
である必要があります)。 、ほとんどのシステムで標準です):
for file in `cat list`; do touch -- $file-customtext; done
これは、各行が単一の単語のみで構成されている場合にのみ機能することに注意してください。このコマンドでは、$file
list
の特定の行で指定されたファイル名に置き換えられます;その周りのすべてが文字どおりに解釈されるため、このコマンドは list
上記の内容は、次のファイルを作成します:
this-customtext
that-customtext
the-other-customtext
もちろん、「-customtext」を好きなものに置き換えることができます。また、プレフィックスとサフィックスを使用することもできます。代わりに do touch -- some-$file-text
があった場合 、たとえば、同様に機能し、some-this-text
という名前のファイルが生成されます &c.
では、list
の内容を想定すると、 特に、スペース、単語以外の文字、またはシェルが適切に解釈しないその他のものが含まれているためです。この場合に何を勧めるかを 3 人に尋ねると、おそらく 5 つの答えが得られるでしょう。私は Perl ハッカーなので、答えは Perl です。具体的には、list
と仮定しましょう 以下を含む:
This is the first line
of three (three?) lines
in the list file.
これを行う方法は次のとおりです:
cat list | perl -ne'chomp; system(qq|touch -- "custom $_ text"|)'
結果のファイルを生成します:
custom This is the first line text
custom of three (three?) lines text
custom in the list file. text
この場合のカスタム テキストは、"
が含まれていない限り、スペースなど何でも構いません。 (これは touch
を混乱させます ) も '
(これは perl
を混乱させます ); Perl コマンドでは、$_
list
からの特定の行の内容を表します 、およびカスタム テキストはその前または後に属しますが、二重引用符内にあります。 (二重引用符の外側のカスタム テキストは touch
によって認識されます touch
の原因となるものが含まれていない限り、文字通り作成される別のファイル名として エラーになります。)