用于创建目录结构的Bash脚本

use*_*905 9 linux bash if-statement

我一直在谷歌搜索,试图找到一种方法来创建一个创建目录结构的脚本.看起来像这样:

/
shared
shared/projects
shared/series
shared/movies
shared/movies/action

你明白了.

脚本从中读取的文件如下所示:

shared backup
shared data
shared projects 
shared projcets series
shared projects movies
shared projects movies action

我想创建一个脚本来读取文件中的每一行并为每一行运行以下内容:如果目录存在,它将自己放在目录中并从那里创建结构,如果该目录不存在,则创建它.
当行中的所有条目都在前面时,返回原始目录并阅读下一行.

我的系统是Ubuntu 10.10.

到目前为止,我已经做到了这一点,但它不起作用.

#!/bin/bash

pwd=$(pwd)

for structure in ${column[*]}
do
  if [ $structure ]
  then
    cd $structure
  else
    mkdir $structure
  fi
done

cd $pwd
Run Code Online (Sandbox Code Playgroud)

lit*_*adv 26

您可以使用它mkdir -p shared/projects/movies/action来创建整个树:它将创建shared,然后shared/projects,然后shared/projects/movies,然后,和shared/projects/movies/action.

所以基本上你需要运行脚本mkdir -p $dir哪里$dir是你的目录树的叶子目录.

  • 对于极其复杂的目录结构,请像这样使用`{}`:`mkdir -p shared / {backup,data,projects / {series,movies / action}}}`您可以根据需要嵌套大括号。这将创建_shared_文件夹,其中包含子文件夹_backup _,_ data_和_projects_。_projects_文件夹将具有子文件夹_series_和_movies_。电影文件夹将具有子文件夹_action_。[来源](http://technosophos.com/2010/04/15/mkdir-creating-multiple-subdirectories-one-command.html) (3认同)

Law*_*man 8

如果struct.txt包含您提到的目录结构,那么只需运行:

sed '/^$/d;s/ /\//g' struct.txt | xargs mkdir -p
Run Code Online (Sandbox Code Playgroud)

sed将删除空行并使其余行看起来像目录路径.
xargs将获取每一行并将其作为参数传递给mkdir.
mkdir将使目录和-p标志将创建任何父目录,如果需要.


B_.*_*B_. 5

mkdir有一个标志-p,可以根据需要创建您正在创建的目录的所有父目录.您可以只读取每一行,将其转换为路径(即s/ /\//g)并调用mkdir -p $path每一行