[英]Bash script that creates a directory structure
我一直在谷歌搜索,试图找到一种方法来创建一个创建目录结构的脚本。 看起来像这样:
/ 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
您可以使用mkdir -p shared/projects/movies/action
来创建整个树:它将创建shared
,然后shared/projects
,然后shared/projects/movies
,以及shared/projects/movies/action
。
所以基本上你需要运行mkdir -p $dir
脚本,其中$dir
是目录树的叶子目录。
如果struct.txt
包含您提到的目录结构,那么只需运行:
sed '/^$/d;s/ /\//g' struct.txt | xargs mkdir -p
sed
将删除空行并使其余行看起来像目录路径。
xargs
将获取每一行并将其作为参数传递给mkdir
。
mkdir
将创建目录, -p
标志将根据需要创建任何父目录。
mkdir有一个标志-p
,可以根据需要创建您正在创建的目录的所有父目录。 您可以只读取每一行,将其转换为路径(即s/ /\\//g
)并在每行上调用mkdir -p $path
1)做这样的事情
find . -type d > folder_list.txt
创建需要创建的文件夹列表。
2)将列表转移到目的地
3)在新位置重新构建结构:
cat folder_list.txt | xargs mkdir
请注意,在这种情况下你不需要'-p'选项,尽管它也不会受到伤害。
我在我用于新项目的.bash_profile中使用此脚本:
alias project_setup="mkdir Sites Documents Applications Website_Graphics Mockups Logos Colors Requirements Wireframes"
如果要创建嵌套文件夹结构,可以执行以下操作:
alias shared_setup="mkdir Shared shared/projects shared/series shared/movies shared/movies/action"
假设您希望创建一个文件夹/目录树,如下所示:
tmpdir ________|______ | | | branches tags trunk | sources ____|_____ | | includes docs
还假设您有一个提及目录名称的变量。
DOMAIN_NAME=includes,docs
您可以发出以下命令:
$ eval "mkdir -p tmpdir/{trunk/sources/{${DOMAIN_NAME}},branches,tags}"
注意: 使用支持花括号扩展的BASH版本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.