【问题标题】:manipulating a string to create directories in unix操作字符串以在 unix 中创建目录
【发布时间】:2013-04-21 01:50:42
【问题描述】:

我想将一个单词作为输入,并在 unix shell 中使用该单词的字母创建连续的目录。我尝试了 sed、awk 和 fold 命令,但没有获得任何有用的结果。有什么建议吗?

例如:如果输入是hello,它应该创建h/e/l/l/o 目录作为一个内另一个目录。换句话说,h 将是顶层目录,o 将是最深的子目录。

【问题讨论】:

    标签: unix sed mkdir


    【解决方案1】:
    mkdir -p $(echo $1 | sed 's/[0-9a-zA-Z]/\0\//g')
    

    编辑:我想一些解释是为了:

    1. mkdir -p 制作目录树
    2. 有问题的目录是根据输入生成的,经过转换
    3. 转换是任何字母或数字变成自己,后跟一个/字符

    【讨论】:

    • 如果你想处理任何字符,mkdir -p "$(echo "$1" | sed 's/./\0\//g')"。处理空格字符的附加引号和“任何字符”匹配。
    • 当我尝试这个时,我得到了所有等于 0 的目录。
    • 这不起作用。 \0 应该是什么?它是 FreeBSD 上的文字 0,而 POSIX 标准将其呈现为未定义的行为。
    【解决方案2】:

    这应该可以在任何 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 忽略了斜杠对我们有利。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-29
      • 2013-05-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多