Создайте несколько файлов из шаблона, ссылающегося на единственный txt файл и касание

Я использовал touch для единственного создания пустых файлов и нескольких пустых файлов от использования списка cat foo.txt | xargs touch плюс я натыкался, Как создать несколько файлов с Терминалом? но у меня есть проблемы, выясняющие, как я могу реализовать создание файлов, которые используют шаблон из списка файлов с чистым ударом.

Имена файлов в файле foo.txt:

cpt-one.php
cpt-two.php
cpt-three.php

template.txt:

// lots of code

Есть ли способ, которым я могу использовать touch создать файл из использования списка, что находится в template.txt вместо того, чтобы создать пустой файл?

2
задан 13 April 2017 в 15:24

2 ответа

bash-esque способ сделать это (без явного цикла) могло бы быть

  • , читает имена файлов в переменную типа массив оболочки

    mapfile -t files < foo.txt
    

    , или ее синоним readarray -t files < foo.txt

  • разворачивают массив в tee, команда

    tee < template.txt -- "${files[@]}" > /dev/null
    

[Эти > /dev/null является дополнительной - это просто скрывается tee стандартный вывод по умолчанию от терминала.]

4
ответ дан 2 December 2019 в 02:19

Если у Вас нет тысяч файлов, которые необходимо создать, можно использовать расширение фигурной скобки:

$> touch cpt-{one,two,three}.php
$> ls
cpt-one.php  cpt-three.php  cpt-two.php

Так как Ваша цель состоит в том, чтобы клонировать шаблон, использовать 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
$> 
0
ответ дан 2 December 2019 в 02:19

Другие вопросы по тегам:

Похожие вопросы: