GNU/Linux >> Belajar Linux >  >> Linux

Cara membuat file bernama setelah baris dalam file teks di Linux

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.)


Linux
  1. Cara Menambahkan Nomor Baris Ke File Teks Di Linux

  2. Buat file dengan menggunakan baris perintah di Linux

  3. Bagaimana membedakan biner dari file teks di linux

  1. Cara Membuat Swap di Linux

  2. Cara membuat file swap di Linux

  3. Cara Membuat File Proc Linux di Program C menggunakan LKM

  1. Cara membuat file sparse di Linux menggunakan perintah 'dd'

  2. Cara tar, untar file dan melihat isi file tar di Linux

  3. Bagaimana cara menghasilkan daftar baris unik dalam file teks menggunakan skrip shell Linux?