Существует ли способ создать новый каталог, содержа подкаталоги и документы?

Для практики веб-разработки я использую стек LAMP на Ubuntu 17.10. Для этого я создаю каталоги в /var/www, каждый каталог называют в честь проекта.

Для создания подкаталога, я использую терминал и:

david@Ed:/var/www/html$ mkdir projectName
david@Ed:/var/www/html$ cd projectName
david@Ed:/var/www/html/projectName$ mkdir css img js
david@Ed:/var/www/html/projectName$ touch index.html
david@Ed:/var/www/html/projectName$ ls
css  img  index.html  js

Это работает. И, во всей честности, является совсем не трудным. Но, есть ли средство, которым я могу упростить это?

Я знаю что:

mkdir -p projectName/css

Создаст обоих css, и родитель projectName, каталог (если тот родитель уже не существует), но он все еще оставляет требование создания других двух каталогов и index.html файл (снова, это не особенно трудно, но чувствует, что должно быть ненужным).

Идеально я хотел бы это команда mkdir <projectName> когда выполнено в /var/www каталог создал бы <projectName> каталог с css, img, js каталоги и index.html документ (что документ, идеально содержащий скелет действительного документа HTML*). Однако я принимаю то злоупотребление mkdir команда, вероятно, привела бы к непредвиденным/предсказуемым пограничным случаям и последствиям, таким образом, вероятно, лучший компромисс является сценарием некоторого вида.

С вышеупомянутым в памяти, я создал следующий (наивный/простой) сценарий:

#!/bin/bash
mkdir $@
cd $@
mkdir css img js
touch index.html

Я называю вышеупомянутый сценарий следующим образом:

./createDir.sh projectName

Это работает, но является меньше, чем идеал; проблемы:

  1. созданный index.html имеет тип plain text document (text/plain), вместо ожидаемого HTML document (text/html), и конечно
  2. не имеет ни одной из структуры документа HTML (как обрисовано в общих чертах в единственной сноске), потому что я не добавил содержания (и еще не нашли, что способ создать сказал что содержание в сценарии).

Кроме того, несколько очевидно, оба css и js каталоги были бы также – идеально – быть созданными с документами (project.css и project.js) неповрежденный.

Так, есть ли средство, которым я могу создать – с использованием сценария, или иначе – каталог с его подкаталогами и документы?


*. Как элементарный пример:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="js/project.js"></script>
  <link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
0
задан 4 August 2018 в 10:06

3 ответа

Я предположил бы, что Вы, чтобы сделать что-то как команда adduser делаете со скелетом (https://unix.stackexchange.com/questions/285708/skeleton-directory-how-to-add-my-own-directories).

Сделайте шаблон/скелет где-нибудь, где все начальные файлы и каталоги для проекта организованы, как они были бы в проекте. После создания каталога для нового проекта, Вы просто копируете скелет в место назначения с простой копией:

cp -fvar <template directory> <destination directory>

Параметры в команде CP следующие:

f - force overwrite if destination already exists
v - verbose to show what is being copied
a - archive to preserve file permissions and ownerships
r - recursive to copy all directories and files.

Я указал бы здесь на параметр архива, который позволяет Вам устанавливать корректные файлы и полномочия каталогов и владения в шаблоне. Они будут сохранены при копировании и таким образом у Вас есть файлы в проекте с корректными полномочиями для веб-сервера для доступа к ним. Если Вы хотите иметь различные владения файлов для каждого проекта, необходимо будет сделать это вручную, снова с простыми командами (chmod -R <permissions> <destination directory> и chown -R <ownership> <destination directory).

1
ответ дан 28 October 2019 в 05:34

Вам будет нужен некоторый шаблон для Вашего index.html скопировать с. Но можно создать такой шаблон на лету и затем скопировать его в желаемое место назначения. install команда может помочь:

#!/usr/bin/env bash

template=$(mktemp);     # creates a temporary file, usually in /tmp

# Add the HTML code to that temporary file:
cat << EOF > $template
<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="js/project.js"></script>
  <link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
EOF

# "Install" the file with the given mode 
# and create any intermediate directories:
install -m 0644 -D $template /var/www/html/projectName/index.html

# remove the temporary file
rm $template;

exit 0;

Вероятно, необходимо запустить этот скрипт через sudo потому что /var/... не является мировым перезаписываемым.

1
ответ дан 28 October 2019 в 05:34

В то время как это - несовершенный ответ и главным образом производится через некоторые дальнейшие поиски после того, как я отправил вопрос, я обновил свой сценарий и решил большую часть проблемы.

Мой текущий сценарий (одинаково наивный и простой, хотя это, конечно):

#!/bin/bash
mkdir $@
cd $@
mkdir css img js
cat > index.html <<- "EOF"
<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="js/project.js"></script>
  <link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
EOF
cat > css/project.css <<- "EOF"
*, ::before, ::after {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}
EOF
cat > js/project.js <<- "EOF"
;
EOF

Это чувствует себя немного грязным, хотя это действительно работает. Основной вопрос с этим, текущим, подход состоит в том, что заключительная кошка звонит:

cat > js/project.js <<- "EOF"
;
EOF

Это для представления документа, который правильно определяется type свойство как application/javascript, тогда как использование:

touch js/project.js

Просто создает еще один документ – с корректным расширением типа файла – чей атрибут типа plain text document (text/plain).

0
ответ дан 28 October 2019 в 05:34

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

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