Search code examples
unixsedmkdir

manipulating a string to create directories in unix


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.


Solution

  • 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.