Jas*_*ick 6 bash nested directory-structure mkdir subdirectory
我知道我可以通过一个相当冗长的系列创建一系列嵌套目录,mkdir -p并-p应用该标志来禁止该目录已经存在的警告.单个调用会变得非常冗长,即:
mkdir -p hello
mkdir -p hello/i_am_a
mkdir -p hello/i_am_a/boy
mkdir -p hello/i_am_a/girl
mkdir -p hello/i_am_a/alien
mkdir -p hello/i_am_a/dog
mkdir -p hello/my_name_is
mkdir -p hello/my_name_is/jim
mkdir -p hello/my_name_is/bob
mkdir -p hello/my_name_is/secret
Run Code Online (Sandbox Code Playgroud)
我想在一次调用中构建树或至少部分树,其中嵌套模式由列表打开字符(即{),列表分隔符(即,)和列表关闭字符(即})组成.
对于从顶部开始的每个级别,如果该名称不存在,则创建该名称的目录.
要用真实的单词继续我上面的愚蠢的例子,我会使用输入字符串:
'你好{{i_am_a男孩,女孩,外星人,狗},{my_name_is吉姆,鲍勃,秘密}}'
......应该创造以下......
hello
hello/i_am_a
hello/i_am_a/boy
hello/i_am_a/girl
hello/i_am_a/alien
hello/i_am_a/dog
hello/my_name_is
hello/my_name_is/jim
hello/my_name_is/bob
hello/my_name_is/secret
Run Code Online (Sandbox Code Playgroud)
为方便起见,假设如果它影响解的长度,我们可以假设n在结果树中只有嵌套层(例如,n=3在上面的例子中).
让我们进一步假设为方便起见,这三个特殊的结构特点(在上面的例子中,例如{,,和})嵌套字符串将永远不会发生,也就是说,它们将永远不会得到的文件路径显示出来.
似乎一个Perl或Python嵌入式脚本可能会成功,但也许有一个更简单的解决方案使用内置BASH功能?
我的目标是一个简洁的解决方案,减少我的数据后处理脚本的冗长,这通常涉及创建分层目录树,填充更深层次的中间体,我保存以便重复使用,并在目录中完成最终结果这棵树
F. *_*uri 19
试试这个:
mkdir -p hello/{i_am_a/{boy,girl,alien,dog},my_name_is/{jim,bob,secret}}
Run Code Online (Sandbox Code Playgroud)
似乎做了这个工作:
find *
hello
hello/i_am_a
hello/i_am_a/dog
hello/i_am_a/alien
hello/i_am_a/boy
hello/i_am_a/girl
hello/my_name_is
hello/my_name_is/bob
hello/my_name_is/secret
hello/my_name_is/jim
Run Code Online (Sandbox Code Playgroud)
... 进一步?
这将在每个目录中创建30个文件(命名file_0a为file_2j):
touch hello/{i_am_a/{boy,girl,alien,dog},my_name_is/{jim,bob,secret}}/file_{0..2}{a..j}
Run Code Online (Sandbox Code Playgroud)
(用于填充这210个文件,你可以更换touch的date | tee,样品).
find * -ls | sed -ne '1,7{p;d};:;N;$!b;${s/^.*\(\(\n[^\n]*\)\{5\}\)\n*$/...\1/p;}'
1703938 4 drwxr-xr-x 4 user user 4096 avr 3 22:23 hello
1703939 4 drwxr-xr-x 6 user user 4096 avr 3 22:23 hello/i_am_a
1703943 4 drwxr-xr-x 2 user user 4096 avr 3 22:23 hello/i_am_a/dog
1704066 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/i_am_a/dog/file_2i
1704057 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/i_am_a/dog/file_1j
1704061 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/i_am_a/dog/file_2d
1704052 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/i_am_a/dog/file_1e
...
1704076 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/my_name_is/jim/file_0i
1704097 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/my_name_is/jim/file_2j
1704074 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/my_name_is/jim/file_0g
1704073 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/my_name_is/jim/file_0f
1704081 0 -rw-r--r-- 1 user user 0 avr 3 22:23 hello/my_name_is/jim/file_1d
Run Code Online (Sandbox Code Playgroud)
......正如Jonathan Leffler建议的那样,看一看man -Pless\ +/Brace.Expansion bash