AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1062388
Accepted
David Thomas
David Thomas
Asked: 2018-08-05 09:06:38 +0800 CST2018-08-05 09:06:38 +0800 CST 2018-08-05 09:06:38 +0800 CST

有没有办法创建一个包含子目录和文档的新目录?

  • 772

对于 Web 开发实践,我在 Ubuntu 17.10 上使用 LAMP 堆栈。为此,我在 中创建目录/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和 parentprojectName目录(如果该父目录尚不存在),但仍然需要创建其他两个目录和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. createdindex.html的类型是plain text document (text/plain),而不是预期HTML document (text/html)的,当然
  2. 没有 HTML 文档的结构(如单个脚注中所述),因为我没有添加任何内容(并且还没有找到在脚本中创建所述内容的方法)。

此外,可以预见的是,理想情况下css,the和js目录也将在创建时文档 (和) 完好无损。project.cssproject.js

那么,有没有一种方法可以让我(使用脚本或其他方式)创建一个包含子目录和文档的目录?


* . 作为一个基本的例子:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <script src="js/project.js"></script>
  <link href="css/project.css" rel="stylesheet" />
</head>
<body></body>
</html>
scripts directory mkdir
  • 3 3 个回答
  • 300 Views

3 个回答

  • Voted
  1. Best Answer
    PerlDuck
    2018-08-05T09:23:11+08:002018-08-05T09:23:11+08:00

    您需要一些模板供您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
  2. nobody
    2018-08-06T21:20:51+08:002018-08-06T21:20:51+08:00

    我建议您执行 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.
    

    我要在这里指出一个存档参数,它允许您在模板中设置正确的文件和目录权限和所有权。它们在复制时将被保留,这样您就可以在项目中拥有具有正确权限的文件以供 Web 服务器访问它们。如果您想为每个项目拥有不同的文件所有权,则必须手动执行此操作,再次使用简单的命令(chmod -R <permissions> <destination directory>和chown -R <ownership> <destination directory)。

    • 1
  3. David Thomas
    2018-08-05T09:21:37+08:002018-08-05T09:21:37+08:00

    虽然这是一个不完美的答案,并且主要是在我发布问题后通过进一步搜索产生的,但我已经更新了我的脚本并解决了大部分问题。

    我当前的脚本(虽然它确实是同样天真和简单)是:

    #!/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 调用:

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

    这将生成一个由其type属性正确标识为的文档application/javascript,同时使用:

    touch js/project.js
    

    只需创建另一个文档——具有正确的文件类型扩展名——其类型属性为plain text document (text/plain).

    • 0

相关问题

  • 如何在 Nautilus 中管理保存的完整网页及其目录(例如 n.html 和 n_files)

  • 如何每 5 秒运行一次脚本?

  • 如何将必须从其自己的目录中运行的程序添加到面板或主菜单?

  • 如何编写 shell 脚本来安装应用程序列表?

  • Mac OS X Automator 的替代品?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve