在shell脚本中创建子文件夹的更好方法是什么?而不是使用以下方法?
mkdir /var/log
mkdir /var/log/celery
mkdir /var/log/celery/stdout
mkdir /var/log/celery/stderr
touch /var/log/celery/stdout/stdout.log <<< I'm hoping the use this path create folder if doesn't exists....
touch /var/log/celery/stderr/stderr.log
答案 0 :(得分:2)
mkdir
有一个-p
标志,用于创建父目录,但touch
不会创建不存在的目录。
仍然将上述内容减少到:
mkdir -p /var/log/celery/stdout /var/log/celery/stderr
touch /var/log/celery/stdout/stdout.log /var/log/celery/stderr/stderr.log
在支持大括号扩展的shell中,甚至可能是:
mkdir -p /var/log/celery/{stdout,stderr}
touch /var/log/celery/{stdout/stdout.log,stderr/stderr.log}
实际上,如果你有大括号扩展而不是mkdir -p
,你可以这样做:
mkdir /var/log{,/celery{,/{stdout,stderr}}}
touch /var/log/celery/{stdout/stdout.log,stderr/stderr.log}
但是,没有任何方法可以将mkdir
和touch
步骤与我所知道的标准工具结合起来。
答案 1 :(得分:1)
-p
的{{1}}选项会创建路径的中间文件夹(如果它们不存在)(当然,如果您有相应的权限):
mkdir
要创建文件,您可以在运算符mkdir -p /var/log/celery/stderr
之后附加touch
,因此只有在目录成功创建或已存在的情况下才会触摸操作:
&&
(基本上,mkdir -p /var/log/celery/stderr && touch "$_/stderr.log"
会将dir路径传递给$_
命令)
答案 2 :(得分:0)
UNTESTED:
$ needir () { mkdir -p $1; echo $1; }
$ touch $(needir /var/log/celery/stderr)/stderr.log
并将&#34; needir&#34;在您的.profile中,或者更好的是,在您登录时获取的路径上的函数库中。你经常使用它会感到惊讶。