问题
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:
mkdir -p
to make a directory tree- the directory in question is made from the input, with a transformation
- 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