manipulating a string to create directories in unix

无人久伴 提交于 2019-12-10 23:27:21

问题


I want to take a word as input and creating consecutive directories using the letters of this word in unix shell. I tried sed, awk and fold commands but did not obtaiın any useful result. Any advice?

For example: If input is hello, it should create h/e/l/l/o directories as one inside another. In other words, h will be the top directory and o will be the deepest subdirectory.


回答1:


This should do the trick in any Bourne compatible 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

Note that \1 is a backreference to the text matched by the first pair of \(...\). Note also that the expansion result is mkdir -p f/o/o/b/a/r/ -- but mkdir ignores the trailing slash to our advantage.




回答2:


mkdir -p $(echo $1 | sed 's/[0-9a-zA-Z]/\0\//g')

EDIT: I suppose some explanation is in order:

  1. mkdir -p to make a directory tree
  2. the directory in question is made from the input, with a transformation
  3. the transformation is that any letter or number is turned into itself, followed by a / character


来源:https://stackoverflow.com/questions/16244046/manupulating-a-string-to-create-directories-in-unix

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!