GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo crear archivos con nombres de líneas en un archivo de texto en Linux

Digamos que tienes list.txt así:

file 1
file 2
file 3

Puedes lograr lo que quieras con:

while read FILE; do touch "${FILE} some string"; done < list.txt

Así que tienes un archivo list que contiene:

this
that
the-other

y desea crear, para cada línea de ese archivo, un archivo con el nombre dado en esa línea. Eso es bastante fácil, si y solo si cada línea consta de una sola palabra:

cat list | xargs touch --

(El -- le dice a touch no tratar de analizar nada después como un argumento; sin él, si tiene nombres de archivo como -this , el líder - confundirá tocar pensando que 't', 'h', 'i' y 's' son argumentos, en lugar de partes del nombre de archivo literal para tocar).

Ese es el caso simple resuelto, pero no es lo que pediste; si desea que el nombre del archivo contenga algo de texto más allá de lo especificado en las líneas en list , las cosas se complican más; xargs no puede hacer ese tipo de interpolación. En su lugar, necesitaría algo como lo siguiente (que requiere que su shell sea bash , como es estándar en la mayoría de los sistemas):

for file in `cat list`; do touch -- $file-customtext; done

Tenga en cuenta que esto solo funciona si cada línea consta de una sola palabra. En este comando, $file se reemplaza por el nombre de archivo especificado en una línea dada en list; todo lo que lo rodea se toma literalmente, por lo que este comando con el list el contenido anterior crearía los siguientes archivos:

this-customtext
that-customtext
the-other-customtext

Puede reemplazar '-customtext' con lo que quiera, por supuesto, y también puede tener un prefijo y un sufijo; si en cambio tuvieras do touch -- some-$file-text , por ejemplo, funcionaría igual de bien y daría como resultado archivos llamados some-this-text &c.

Ahora bien, suponiendo que el contenido de list no son tan simples, específicamente, que contienen espacios, caracteres que no son palabras u otras cosas que el shell no interpretará correctamente. Si le preguntas a tres personas qué recomendarían en este caso, probablemente obtendrás cinco respuestas; Soy un hacker de Perl, así que mi respuesta es Perl. Específicamente, supongamos un list que contiene:

This is the first line
of three (three?) lines
in the list file.

La forma en que haría esto sería:

cat list | perl -ne'chomp; system(qq|touch -- "custom $_ text"|)'

Lo que produce los archivos resultantes:

custom This is the first line text
custom of three (three?) lines text
custom in the list file. text

El texto personalizado en este caso puede ser lo que quieras, espacios y todo, siempre que no contenga " (que confundirá a touch ) ni ' (lo que confundirá a perl ); en el comando Perl, $_ representa el contenido de una línea dada de list , y el texto personalizado debe estar antes o después, pero entre comillas dobles. (El texto personalizado fuera de las comillas dobles será considerado por touch como un nombre de archivo separado, que se creará literalmente a menos que contenga algo que cause touch a error.)


Linux
  1. Cómo crear un intercambio en Linux

  2. Cómo crear un archivo de intercambio en Linux

  3. Crear archivos usando la línea de comando en Linux

  4. ¿Cómo enumero archivos con rutas completas en Linux?

  5. ¿Cómo mostrar ciertas líneas de un archivo de texto en Linux?

Cómo cambiar el nombre de un archivo (s) en Linux

Cómo crear directorios desde un archivo de texto en Linux

Cómo imprimir líneas duplicadas en un archivo de texto en Linux

Cómo encontrar archivos que contengan una cadena de texto específica en Linux

Cómo comprimir un archivo en Linux

Cómo crear archivos zip o directorios protegidos con contraseña en Linux