【发布时间】:2013-04-21 01:50:42
【问题描述】:
我想将一个单词作为输入,并在 unix shell 中使用该单词的字母创建连续的目录。我尝试了 sed、awk 和 fold 命令,但没有获得任何有用的结果。有什么建议吗?
例如:如果输入是hello,它应该创建h/e/l/l/o 目录作为一个内另一个目录。换句话说,h 将是顶层目录,o 将是最深的子目录。
【问题讨论】:
我想将一个单词作为输入,并在 unix shell 中使用该单词的字母创建连续的目录。我尝试了 sed、awk 和 fold 命令,但没有获得任何有用的结果。有什么建议吗?
例如:如果输入是hello,它应该创建h/e/l/l/o 目录作为一个内另一个目录。换句话说,h 将是顶层目录,o 将是最深的子目录。
【问题讨论】:
mkdir -p $(echo $1 | sed 's/[0-9a-zA-Z]/\0\//g')
编辑:我想一些解释是为了:
mkdir -p 制作目录树/字符【讨论】:
mkdir -p "$(echo "$1" | sed 's/./\0\//g')"。处理空格字符的附加引号和“任何字符”匹配。
\0 应该是什么?它是 FreeBSD 上的文字 0,而 POSIX 标准将其呈现为未定义的行为。
这应该可以在任何 Bourne 兼容的 shell 中解决问题:
$ mkdir -p $(echo foobar | sed 's:\(.\):\1/:g')
$ find f
f
f/o
f/o/o
f/o/o/b
f/o/o/b/a
f/o/o/b/a/r
请注意,\1 是对与第一对 \(...\) 匹配的文本的反向引用。另请注意,扩展结果是 mkdir -p f/o/o/b/a/r/ -- 但 mkdir 忽略了斜杠对我们有利。
【讨论】: