Katakanlah Anda memiliki list.txt
seperti ini:
file 1
file 2
file 3
Anda dapat mencapai apa yang Anda inginkan dengan:
while read FILE; do touch "${FILE} some string"; done < list.txt
Jadi Anda punya file list
yang berisi:
this
that
the-other
dan Anda ingin membuat, untuk setiap baris dalam file itu, sebuah file dengan nama yang diberikan pada baris itu. Itu cukup mudah – jika dan hanya jika setiap baris hanya terdiri dari satu kata:
cat list | xargs touch --
(--
memberi tahu touch
tidak mencoba menguraikan apa pun setelahnya sebagai argumen; tanpanya, jika Anda memiliki nama file seperti -this
, -
terkemuka akan membingungkan touch untuk berpikir 't', 'h', 'i', dan 's' dimaksudkan sebagai argumen, bukan bagian dari nama file literal untuk disentuh.)
Itu kasus sederhana yang ditangani, tetapi bukan itu yang Anda minta; jika Anda ingin nama file memuat beberapa teks di luar apa yang ditentukan pada baris di list
, segalanya menjadi lebih rumit; xargs tidak dapat melakukan interpolasi semacam itu. Sebagai gantinya, Anda memerlukan sesuatu seperti berikut (yang mengharuskan shell Anda adalah bash
, seperti standar pada kebanyakan sistem):
for file in `cat list`; do touch -- $file-customtext; done
Berhati-hatilah karena ini masih hanya berfungsi jika setiap baris terdiri dari satu kata saja. Dalam perintah ini, $file
diganti dengan nama file yang ditentukan pada baris tertentu di list
; segala sesuatu di sekitarnya diambil secara harfiah, jadi perintah ini dengan list
konten di atas akan membuat file berikut:
this-customtext
that-customtext
the-other-customtext
Anda dapat mengganti '-customtext' dengan apa pun yang Anda suka, tentu saja, dan Anda juga dapat memiliki awalan serta akhiran; jika Anda malah memiliki do touch -- some-$file-text
, misalnya, itu akan berfungsi dengan baik, dan menghasilkan file bernama some-this-text
&c.
Sekarang, misalkan isi dari list
tidak begitu sederhana -- khususnya, mengandung spasi, karakter non-kata, atau hal lain yang tidak dapat ditafsirkan dengan benar oleh shell. Jika Anda bertanya kepada tiga orang apa yang mereka rekomendasikan dalam kasus ini, kemungkinan besar Anda akan mendapatkan lima jawaban; Saya seorang peretas Perl, jadi jawaban saya adalah Perl. Secara khusus, mari kita asumsikan list
yang berisi:
This is the first line
of three (three?) lines
in the list file.
Cara saya melakukannya adalah:
cat list | perl -ne'chomp; system(qq|touch -- "custom $_ text"|)'
Yang menghasilkan file yang dihasilkan:
custom This is the first line text
custom of three (three?) lines text
custom in the list file. text
Teks khusus dalam hal ini dapat berupa apa pun yang Anda suka, spasi dan semuanya, asalkan tidak mengandung "
(yang akan membingungkan touch
) maupun '
(yang akan membingungkan perl
); dalam perintah Perl, $_
mewakili isi baris tertentu dari list
, dan teks khusus termasuk sebelum atau sesudahnya, tetapi dalam tanda kutip ganda. (Teks khusus di luar tanda kutip ganda akan dianggap oleh touch
sebagai nama file terpisah, yang akan dibuat secara harfiah kecuali jika mengandung sesuatu yang akan menyebabkan touch
untuk membuat kesalahan.)