我一整天都在谷歌搜索,试图找到一种方法来创建一个创建目录结构的脚本。看起来像这样:
/ 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
答案 0 :(得分:25)
您可以使用mkdir -p shared/projects/movies/action
创建整个树:它将创建shared
,然后shared/projects
,然后shared/projects/movies
和shared/projects/movies/action
。
所以基本上你需要运行mkdir -p $dir
的脚本,其中$dir
是目录树的叶子目录。
答案 1 :(得分:7)
如果struct.txt
包含您提到的目录结构,则只需运行:
sed '/^$/d;s/ /\//g' struct.txt | xargs mkdir -p
sed
将删除空白行,并使其余行看起来像目录路径
xargs
将获取每一行并将其作为参数传递给mkdir
mkdir
将创建目录,-p
标志将根据需要创建任何父目录。
答案 2 :(得分:5)
mkdir有一个标志-p
,可根据需要创建您正在创建的目录的所有父目录。您只需阅读每一行,将其转换为路径(即s/ /\//g
)并在每行上调用mkdir -p $path
答案 3 :(得分:3)
1)做这样的事情
find . -type d > folder_list.txt
创建您需要创建的文件夹列表。
2)将列表转移到目的地
3)在新位置重新构建结构:
cat folder_list.txt | xargs mkdir
请注意,在这种情况下你不需要'-p'选项,尽管它也不会受到伤害。
答案 4 :(得分:1)
我在我用于新项目的.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"
答案 5 :(得分:1)
对于我的解决方案,这对我很重要:
a)我希望能够直接在bash脚本中编辑目录结构,这样就不必在两个文件之间来回跳转
b)文件夹的代码应尽可能清晰,没有冗余且路径相同,以便我可以轻松更改
For i = 1 To tempFileDialog.SelectedItems.Count
Set sourceWorkbook = Workbooks.Open(tempFileDialog.SelectedItems(i))
With sourceWorkbook.Worksheets(1)
If .Range("A1") <> "" Then
Dim valRange as Range
With .Cells(1).CurrentRegion
Set valRange = .Offset(1).Resize(.Rows.Count - 1, .Columns.Count - 1)
End With
End With
End If
With ThisWorkbook.Worksheets("Sheet1")
loLastRow = .Cells(Rows.Count, 1).End(xlUp).Row + 1
.Range("A" & loLastRow).Resize(valRange.Rows.Count,valRange.Columns.Count).Value = valRange.Value
'ThisWorkbook.Save
End With
sourceWorkbook.Close
Next i
Git需要文件来记录目录。因此,我在每个目录中都放置了一个自述文件,并按如下所示扩展了脚本:
# Creates the folder structure defined in folder structure section below
function createFolderStructure() {
depth="1"
while (( "$#" )); do
while (( $1 != $depth )); do
cd ..
(( depth-- ))
done
shift
mkdir "$1"
cd "$1"
(( depth++ ))
shift
done
while (( 1 != $depth )); do
cd ..
(( depth-- ))
done
}
# Folder Structure Section
read -r -d '' FOLDERSTRUCTURE << EOM
1 shared
2 projects
3 movies
4 action
2 series
2 backup
EOM
createFolderStructure $FOLDERSTRUCTURE
答案 6 :(得分:0)
假设您希望创建一个文件夹/目录树,如下所示:
tmpdir ________|______ | | | branches tags trunk | sources ____|_____ | | includes docs
还假设您有一个提及目录名称的变量
DOMAIN_NAME=includes,docs
您可以发出以下命令:
$ eval "mkdir -p tmpdir/{trunk/sources/{${DOMAIN_NAME}},branches,tags}"
注意: 使用支持花括号扩展的BASH版本。